【问题标题】:Laravel 5.3 Controller __construct called before middlewareLaravel 5.3 Controller __construct 在中间件之前调用
【发布时间】:2016-09-16 15:17:01
【问题描述】:

我有一个 Controller 父类,它接受一些由中间件添加到 $request 的属性,并使它们可用于所有子类。

所以在我的中间件handle() 函数中我有:

$request->attributes->add(['project' => $project]);

在我的控制器 __construct() 我有:

$this->project = $request->attributes->get('project');

这在 5.2 中运行良好,但自从升级到 5.3 后,我意识到控制器 __construct() 在我的中间件 handle() 函数之前被调用,因此“项目”属性是 null

有谁知道为什么要在 Controller 之后调用中间件? 从 5.2 到 5.3 有什么变化吗?

谢谢!

【问题讨论】:

    标签: laravel-5.3


    【解决方案1】:

    看起来这在 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);
    });
    

    因为控制器中间件会在最后被调用,这样你就可以在路由中间件设置好之后访问类中的请求属性。

    干杯。

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 2017-12-11
      • 2017-03-27
      • 2017-01-08
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      相关资源
      最近更新 更多