在我的laravel包中,我想使用全局中间件设置新的配置值
因此,我使用服务提供者注册中间件
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);
}
我做了测试,中间件注册正确,但我仍然不能在运行时设置配置值。
唯一对我有效的是当我在服务提供商 Boot 方法中设置配置值时。
public function boot()
{
config(['mail.from.name' => 'New Name']);
....
}
2条答案
按热度按时间dzhpxtsq1#
对于Laravel 5,6,7,我可以确认,如果你想通过中间件设置配置值,你需要使用 Illuminate\Support\Facades\Config façade和set方法:
helper方法在中间件中不起作用,但在大多数其他地方都起作用:
x7rlezfr2#
中间件在服务提供者和配置加载之后执行。这意味着在初始化Mail堆栈时,它采用“旧”配置值。
在中间件中设置配置之后,您应该做类似于下面的事情,因为您正在使用
MailServiceProvider
。无论如何,在中间件中更改配置值是一个不好的做法(正如您所看到的,它并不总是工作),您必须在服务提供者中这样做。
这也是因为中间件不会在非http场景中执行(作业队列、artisan命令、计划任务……)
反正