【问题标题】:Custom helper classes in Laravel 5.4Laravel 5.4 中的自定义助手类
【发布时间】:2017-08-27 09:07:55
【问题描述】:

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

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

<?php

nampespace App\Helpers;

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

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

{{ fooBar() }}

而不是这样做:

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 2019-02-02
    • 2018-11-21
    • 1970-01-01
    • 2017-11-09
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多