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

byt*_*ker 14 php laravel composer-php laravel-5 laravel-5.4

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

例如,如果我有一个CustomHelper包含方法的类fooBar():

<?php

nampespace App\Helpers;

class CustomHelper
{
    static function fooBar()
    {
        return 'it works!';
    }
}
Run Code Online (Sandbox Code Playgroud)

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

{{ fooBar() }}
Run Code Online (Sandbox Code Playgroud)

而不是这样做:

{{ \App\Helpers\CustomHelper::fooBar() }}
Run Code Online (Sandbox Code Playgroud)

PS: @安德鲁-布朗的回答的最佳做法上Laravel 5个自定义的助手与非类文件的交易.拥有一个基于类的解决方案会很好,这样可以在类之间组织辅助函数.

Mar*_*łek 32

我不认为只有在类中有代码时才能使用函数.好吧,你可以尝试扩展Blade,但它太多了.

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

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": ["app/Helpers/helpers.php"] // <- this line was added
},
Run Code Online (Sandbox Code Playgroud)

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

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

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

if (! function_exists('fooBar')) {
   function fooBar() 
   {
      return \App\Helpers\CustomHelper::fooBar();
   }
}
Run Code Online (Sandbox Code Playgroud)

所以你定义了全局函数,但事实上它们都可能使用某些类的特定公共方法.

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

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

正如你所看到array_add的只是更短(或者更简洁)的写作方式Arr::add