在我的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']);
....
}
答案 0 :(得分:0)
在服务提供商和配置加载后执行中间件。这意味着当邮件堆栈初始化后,它将采用“旧的”配置值。
假设您正在使用MailServiceProvider
,则在中间件中设置配置后,应该执行以下操作。
(new Illuminate\Mail\MailServiceProvider(app()))->register();
无论如何,在中间件中更改配置值是一个不好的做法(如您所见,它并非一直都有效),您必须在服务提供商中执行此操作。
这也是因为中间件不在非HTTP场景(作业队列,工匠命令,计划任务...)中执行
反正
答案 1 :(得分:0)
对于Laravel 5,6,7,我可以确认,如果要通过中间件设置配置值,则需要使用 Illuminate \ Support \ Facades \ Config 外观,并将set方法设置为在:
MoutainChallenge
helper方法在中间件中不起作用,但在大多数其他地方:
Challenge