Laravel 5.3 Controller __construct在中间件之前调用

时间:2016-09-16 15:17:02

标签: laravel-5.3

我有一个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?

谢谢!

1 个答案:

答案 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);
});

由于最后会调用控制器中间件,因此在路由中间件设置后可以访问类中的请求属性。

干杯。