我有一个Controller父类,它通过中间件将一些属性添加到$config['img_path'] = ''; // Relative to domain name
,并使它们可供所有子类使用。
因此,在我的中间件$request
函数中,我有:
handle()
在我的控制器$request->attributes->add(['project' => $project]);
中,我有:
__construct()
这在5.2中运行良好,但自从升级到5.3后,我意识到在我的中间件$this->project = $request->attributes->get('project');
函数之前调用了控制器__construct()
,因此'project'属性为{{1 }}
有谁知道为什么在控制器之后调用中间件? 有什么变化从5.2到5.3?
谢谢!
答案 0 :(得分:4)
看起来这是在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);
});
由于最后会调用控制器中间件,因此在路由中间件设置后可以访问类中的请求属性。
干杯。