Laravel 5.3 控制器 __construct 在中间件之前调用
Laravel 5.3 Controller __construct called before middleware
我有一个 Controller parent class,它接受中间件添加到 $request
的一些属性,并使它们对所有子 classes 可用。
所以在我的中间件 handle()
函数中我有:
$request->attributes->add(['project' => $project]);
在我的控制器中 __construct()
我有:
$this->project = $request->attributes->get('project');
这在 5.2 中运行良好,但自升级到 5.3 后,我意识到控制器 __construct()
在我的中间件 handle()
函数之前被调用,因此 'project' 属性是 null
.
有谁知道为什么在控制器之后调用中间件?
从 5.2 到 5.3 有什么变化吗?
谢谢!
看起来这是 5.3 中的更改:
https://laravel-news.com/2016/08/controller-construct-session-changes-in-laravel-5-3/
所以现在你可以像这样在 Controller 构造函数中调用中间件:
$this->middleware(function ($request, $next) {
$this->request = $request;
$this->project = $request->attributes->get('project');
return $next($request);
});
因为controller中间件最后会被调用,这样就可以在route中间件设置好后访问class中的request属性
干杯。
我有一个 Controller parent class,它接受中间件添加到 $request
的一些属性,并使它们对所有子 classes 可用。
所以在我的中间件 handle()
函数中我有:
$request->attributes->add(['project' => $project]);
在我的控制器中 __construct()
我有:
$this->project = $request->attributes->get('project');
这在 5.2 中运行良好,但自升级到 5.3 后,我意识到控制器 __construct()
在我的中间件 handle()
函数之前被调用,因此 'project' 属性是 null
.
有谁知道为什么在控制器之后调用中间件? 从 5.2 到 5.3 有什么变化吗?
谢谢!
看起来这是 5.3 中的更改:
https://laravel-news.com/2016/08/controller-construct-session-changes-in-laravel-5-3/
所以现在你可以像这样在 Controller 构造函数中调用中间件:
$this->middleware(function ($request, $next) {
$this->request = $request;
$this->project = $request->attributes->get('project');
return $next($request);
});
因为controller中间件最后会被调用,这样就可以在route中间件设置好后访问class中的request属性
干杯。