2016-09-16 6 views
3

コントローラの親クラスは、ミドルウェアによって$requestに追加されたいくつかの属性を取り、それらをすべての子クラスで使用できるようにします。Laravel 5.3コントローラー__constructはミドルウェアの前に呼び出されます

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

そして、私のコントローラ__construct()に私がしている:

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

これは5.2で正常に働いていたが、5.3にアップグレードするので、私は」私が持っている私のミドルウェアhandle()機能でそう

私のミドルウェアhandle()の前にコントローラ__construct()が呼び出されていることがわかりました。したがって、 'project'属性はnullです。

ミドルウェアがコントローラの後に呼び出されている理由は誰にも分かりますか? 5.2から5.3に何か変更されましたか?

ありがとうございます!

答えて

4

これは5.3に変わったの何かであるように見える。だから今はこのようにコントローラのコンストラクタでミドルウェアを呼び出すことができます

https://laravel-news.com/2016/08/controller-construct-session-changes-in-laravel-5-3/

:コントローラミドルウェアが呼び出されますので

$this->middleware(function ($request, $next) { 
    $this->request = $request; 
    $this->project = $request->attributes->get('project'); 

    return $next($request); 
}); 

最後に、ルートミドルウェアが設定したクラスのリクエスト属性にアクセスすることができます。

乾杯。

関連する問題