Laravel使用Middlware设置配置值

时间:2019-05-23 06:41:28

标签: php laravel laravel-5 environment-variables

在我的laravel软件包中,我想使用Global Middlware设置新的配置值

因此,我使用服务提供商注册中间件

public function boot()
    {
        Route::middlewareGroup('mypackagename', config('mypackagename.middleware', []));
        .....

然后我像这样在程序包配置文件中设置中间件类:

'middleware' => [
        'web',
        qoraiche\mypackagename\Http\Middleware\setConfigs::class,
    ],

setConfigs中间件:

public function handle($request, Closure $next)
    {
        // --
        config(['mail.from.name' => 'New Name']);

        return $next($request);
    }

我进行了测试并且中间件已正确注册,但是我仍然无法在运行时设置配置值。

对我来说唯一有效的方法是在服务提供商启动方法中设置配置值。

public function boot()
    {

     config(['mail.from.name' => 'New Name']);

     ....

}

2 个答案:

答案 0 :(得分:0)

在服务提供商和配置加载后执行中间件。这意味着当邮件堆栈初始化后,它将采用“旧的”配置值。

假设您正在使用MailServiceProvider,则在中间件中设置配置后,应该执行以下操作。

(new Illuminate\Mail\MailServiceProvider(app()))->register();

无论如何,在中间件中更改配置值是一个不好的做法(如您所见,它并非一直都有效),您必须在服务提供商中执行此操作。

这也是因为中间件不在非HTTP场景(作业队列,工匠命令,计划任务...)中执行

反正

答案 1 :(得分:0)

对于Laravel 5,6,7,我可以确认,如果要通过中间件设置配置值,则需要使用 Illuminate \ Support \ Facades \ Config 外观,并将set方法设置为在:

MoutainChallenge

helper方法在中间件中不起作用,但在大多数其他地方:

Challenge