【问题标题】:How can I call a function of a helper class in a view - Laravel 5.8?如何在视图中调用辅助类的函数 - Laravel 5.8?
【发布时间】:2019-11-03 09:37:00
【问题描述】:

我有一个助手类DateHelper

我有一个fn在里面

public static function getAgo($date) {

    if ($date) {

        $ts = time() - strtotime(str_replace("-","/",$date));

        if($ts>31536000) $val = round($ts/31536000,0).' year';
        else if($ts>2419200) $val = round($ts/2419200,0).' month';
        else if($ts>604800) $val = round($ts/604800,0).' week';
        else if($ts>86400) $val = round($ts/86400,0).' day';
        else if($ts>3600) $val = round($ts/3600,0).' hour';
        else if($ts>60) $val = round($ts/60,0).' minute';
        else $val = $ts.' second';

        if($val>1) $val .= 's';

        return $val;


    }

}

我想像这样在我的视图中使用它

{{ DateHelper::getAgo($log->createdAt) }}

我一直得到

找不到类“DateHelper”(查看:...

我试图像这样将它包含在我的 index.blade.php 之上

<?php use App\DateHelper; ?>

有人可以帮我吗?

【问题讨论】:

  • 为什么不直接使用内联命名空间? {{ \App\DateHelper::getAgo(...) }} 当然要确保DateHelperApp 命名空间中,具有正确的类名等。或者,在您的$log 变量(如果它是一个模型)上定义一个使用@987654331 的函数@,然后调用类似$log-&gt;dateHelperFunction() 的东西。很多选择:)
  • 这似乎有效{{ \App\DateHelper::getAgo(...) }} - 请回答,以便其他人也可以向您学习。
  • 也可以使用 Carbon 日期库中的diffForHumans() 方法。

标签: php laravel date laravel-5 laravel-5.8


【解决方案1】:

您可以在 config/app.php 中添加别名:

'aliases' => [
    // ...
    'DateHelper' => App\DateHelper::class,
],

那么在你看来,你可以简单地做:

{{ DateHelper::getAgo($log->created_at); }}

【讨论】:

  • 我想知道它是如何工作的。如果您需要多次使用此帮助器,那么对于 DRY 原则肯定更有用。
  • @TimLewis 我不喜欢别名。如果您真的想从 IDE 中获得任何有用的自动完成功能,它会强制您编写/生成一个 IDE 帮助文件
  • @apokryfos 嗯,有趣;没有想到这一点,但这绝对是一个有效的担忧。妥当注明。就个人而言,如果我有这样的助手,我会将其合并到模型中,例如public function getSomethingAttribute(){ return WhateverHelper::getSomething(); // or $this-&gt;whateverHelper-&gt;getSomething(); },所以我没有遇到过这个问题。
【解决方案2】:

如果 use 语句在视图中不起作用,您始终可以使用内联命名空间:

{{ \App\DateHelper::getAgo($log->created_at) }}

确保该类位于正确的命名空间中并具有正确的类/文件名,您应该一切顺利。

【讨论】:

  • 别名绝对是更好的选择。
  • 每种方法都有利有弊。一次性使用;这可以。多次使用;使用别名。关心 IDE 自动完成/发现,不要使用别名等。这就是为什么这里有 2 个答案:) 如果您认为别名是一个更好的选择,请投票赞成那个。
猜你喜欢
  • 2018-04-28
  • 2019-05-23
  • 2016-04-15
  • 2018-07-08
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2017-01-06
相关资源
最近更新 更多