0

Laravel を 4.2 から laravel5.3 にアップグレードしましたが、コントローラーのコンストラクター内の認証データにアクセスできません

以下のミドルウェアがありますが、うまくいきません

use App\Http\Controllers\BaseController;

use Closure;
use Illuminate\Contracts\Auth\Guard;
use Redirect;
use Auth;
use App\User;


class DashboardController extends BaseController
{

    public $user;

    public function __construct(Guard $guard, User $user)
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user();
            return $next($request);
        });
        //$this->userID = Auth::user()?Auth::user()->id:null;

        dd($user);// Result attributes: []
        dd($guard);
        dd($this->user);

    }

}

DD() 後の結果

dd($ガード); これは $guard の結果です

DD($this->user);

NULL

ユーザープロパティを追加すると、Null が返されます。

4

1 に答える 1

1

これは予想されることです。クロージャー内でユーザーを割り当てる必要がmiddlewareあるのは、セッション ミドルウェアがまだ実行されていないためです。したがって、上記のクロージャーは、実行プロセスの後半まで実際には呼び出されません。

をミドルウェアクロージャー内またはそのコントローラーのルートメソッドのいずれかに移動するdd($this->user)と、まったく問題なく動作するはずです。

また、参考までに、ミドルウェアのクロージャーでuser、リクエストからインスタンスを取得できます。つまり$request->user()、認証されたユーザーが提供されます。

この助けを願っています!

于 2016-10-26T07:23:32.630 に答える