首页 文章

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

提问于
浏览
13

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

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

<?php

nampespace App\Helpers;

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

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

{{ fooBar() }}

而不是这样做:

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

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

1 回答

  • 31

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

相关问题