Laravel 5.4中的自定义辅助类

15
我有一些位于 app/Helpers 目录下的辅助类。如何使用 服务提供者 加载这些类以在 Blade 模板中使用它们?
例如,如果我有一个名为 CustomHelper 的类,其中包含一个名为 fooBar() 的方法:
<?php

nampespace App\Helpers;

class CustomHelper
{
    static function fooBar()
    {
        return 'it works!';
    }
}

我希望能够在我的Blade模板中实现类似以下的功能:

{{ fooBar() }}

不要这样做:

{{ \App\Helpers\CustomHelper::fooBar() }}

P.S: @andrew-brown的回答Laravel 5上自定义帮助程序的最佳实践中处理非类文件。拥有基于类的解决方案将是很好的,这样帮助函数可以在类之间进行组织。


https://laravel.io/forum/02-03-2015-best-practices-for-custom-helpers-on-laravel-5?page=1#reply-20564 - hassan
同时,可参考 https://dev59.com/Tl4c5IYBdhLWcg3wHXNS#32772686。 - hassan
你想要实现一个基于类的解决方案,但是像使用全局函数一样使用它?不要以为在任何语言中都可能实现,更不用说 PHP 或 Laravel 了。 - Paras
1个回答

34

我不认为在类中有代码的情况下仅使用函数是可能的。嗯,你可以尝试通过扩展 Blade 来实现,但这也太麻烦了。

你应该创建一个额外的文件,例如app\Helpers\helpers.php,并在你的composer.json文件中添加:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": ["app/Helpers/helpers.php"] // <- this line was added
},

创建app/Helpers/helpers.php文件并运行

composer dump-autoload

现在,在您的app/Helpers/helpers.php文件中,您可以像这样添加自定义函数:

if (! function_exists('fooBar')) {
   function fooBar() 
   {
      return \App\Helpers\CustomHelper::fooBar();
   }
}

您定义了全局函数,但实际上它们中的所有函数都可能使用某些类的特定公共方法。

顺便说一句,这正是Laravel为其自己的助手所做的事情,例如:

if (! function_exists('array_add')) {
    function array_add($array, $key, $value)
    {
        return Arr::add($array, $key, $value);
    }
}

正如您所看到的,array_add 只是写 Arr::add 的更简短(或者可能不那么冗长)的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接