我有app/Helpers个助手班.如何使用service provider加载这些类,以便在Blade 模板中使用它们?

e、 g.如果我有一个包含方法fooBar()的类CustomHelper:

<?php

nampespace App\Helpers;

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

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

{{ fooBar() }}

而不是这样做:

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

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

推荐答案

我认为,当类中有代码时,不可能只使用函数.嗯,你可以try 延长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的较短(或者可能不那么冗长)的方式

Laravel相关问答推荐

Nginx上带有SSL的Laravel混响

laravel错误更新使用外键的数据库

我是否需要/是否可以从控制器运行LARLAVEL备份?

如何在控制器中获取所需参数?

vagrant会损坏你的电脑. | macOS v12(蒙特雷)#13132

Ziggy 路由默认为查询字符串

无法找到用户sail:passwd 文件中没有匹配的条目

Laravel phpunit 测试失败并出现 PDOException:SQLSTATE[HY000]:一般错误:1 接近0:语法错误

不能在 laravel 中使用控制器名称,必须使用命名空间

当使用Laravel eloquent查询100000条数据时速度很慢

如何在 laravel 5.2 中显示 500 内部服务器错误页面?

Laravel 5.1 是否与 PHP 7 兼容

Laravel timestamps() 不会创建 CURRENT_TIMESTAMP

在 Laravel 中下载后如何重定向?

Laravel 5.3 Electron邮件队列中不允许序列化关闭

验证匹配字符串

将 Laravel 集合排序为 ID 数组

如何在 Laravel 5 请求类中使用有时规则

为什么`catch (Exception $e)` 不处理这个`ErrorException`?

Laravel 验证用户名不允许有空格