我在app/Helpers中有一些帮助程序类。如何使用service provider加载这些类以在 Blade 模板中使用它们?

例如如果我有一个包含方法CustomHelperfooBar()类:

<?php

nampespace App\Helpers;

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

我希望能够在 Blade 模板中执行以下操作:
{{ fooBar() }}

而不是这样做:
{{ \App\Helpers\CustomHelper::fooBar() }}

附言:answer中的 @ andrew-brown的Best practices for custom helpers on Laravel 5处理非类文件。有一个基于类的解决方案将是很好的,这样可以在类之间组织帮助程序功能。

最佳答案

我认为当类中有代码时,仅使用函数是不可能的。好吧,您可以尝试扩展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();
   }
}

因此您可以定义全局函数,但实际上它们都可能使用某些类中的特定公共(public)方法。

顺便说一下,这正是Laravel为自己的助手做的事情,例如:
if (! function_exists('array_add')) {
    function array_add($array, $key, $value)
    {
        return Arr::add($array, $key, $value);
    }
}

如您所见,array_add只是写Arr::add的更短(或更不那么冗长)的方式

关于php - Laravel 5.4中的自定义帮助程序类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43168719/

10-10 18:10