如何在 Laravel 而不是 Facade 上创建辅助方法

Posted

技术标签:

【中文标题】如何在 Laravel 而不是 Facade 上创建辅助方法【英文标题】:How to create Helper Methods on Laravel not a Facade 【发布时间】:2016-09-17 07:02:10 【问题描述】:

我已经阅读了很多关于如何在 Laravel 5.1 中制作辅助方法的问题。但我不想通过 Facade 来实现这一点。

HelperClass::methodName();

我想在这些方法Laravel Helper Methods 上创建辅助方法,例如:

myCustomMethod();

我不想让它成为一个门面。这可能吗?如何?

【问题讨论】:

你想创建一个像array_add()这样的自定义函数吗? @RobinDirksen 是的,先生。你明白了。 【参考方案1】:

如果您想采用“Laravel 方式”,您可以使用自定义助手创建 helpers.php 文件:

if (! function_exists('myCustomHelper')) 
    function myCustomHelper()
    
        return 'Hey, it\'s working!';
    

然后把这个文件放到某个目录下,把这个目录添加到应用的composer.json的自动加载部分:

"autoload": 
    ....
    "files": [
        "app/someFolder/helpers.php"
    ]
,

运行composer dumpauto 命令,您的助手将在所有应用程序中工作,就像 Laravel 的那样。

如果您想了解更多示例,请查看 /vendor/laravel/framework/Illuminate/Support/helpers.php 上的原始 Laravel 助手

【讨论】:

【参考方案2】:

首先,我在我的应用程序目录中创建了一个名为 Helpers 的文件夹。然后在 Helpers 文件夹中,我为我想要添加的功能添加了文件。拥有一个包含多个文件的文件夹可以让我们避免一个大文件变得太长且难以管理。

接下来我通过运行 artisan 命令创建了一个HelperServiceProvider.php

artisan make:provider HelperServiceProvider 在注册方法中,我添加了这个 sn-p

public function register()

    foreach (glob(app_path().'/Helpers/*.php') as $filename)
        require_once($filename);
    

最后在 providers 数组中的 config/app.php 中注册服务提供者

'providers' => [
    'App\Providers\HelperServiceProvider',
]

之后你需要运行 composer dump-autoload 并且你的更改将在 Laravel 中可见。

现在您的Helpers 目录中的所有文件都已加载,可以使用了。

希望这行得通!

【讨论】:

以上是关于如何在 Laravel 而不是 Facade 上创建辅助方法的主要内容,如果未能解决你的问题,请参考以下文章

解读Laravel,看PHP如何实现Facade?

Laravel 创建自己的 Facade 扩展 geoip 根据 IP 获取国家地域城市信息

laravel新建门脸Facade类

laravel facade 怎么使用

laravel 自定义 Facade (门面)

laravel 自定义 Facade (门面)