Laravel 5.4中的自定义帮助程序类

时间:2017-04-02 13:09:46

标签: php laravel laravel-5 composer-php laravel-5.4

我在app/Helpers中有一些辅助类。如何使用service provider加载这些类以在刀片模板中使用它们?

e.g。如果我的课程CustomHelper包含方法fooBar()

<?php

nampespace App\Helpers;

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

我希望能够在我的刀片模板中执行以下操作:

{{ fooBar() }}

而不是这样做:

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

P.S: answer中的@ andrew-brown Best practices for custom helpers on Laravel 5处理非类文件。拥有一个基于类的解决方案会很好,以便可以在类之间组织帮助函数。

1 个答案:

答案 0 :(得分:32)

我不认为只有在课程中有代码时才能使用功能。好吧,你可以尝试扩展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