したがって、通常はAuth::user()
を使用して現在のユーザーを取得しており、ユーザーが実際にAuth::check
にログインしているかどうかを確認しています。ただし、これは私のAppServiceProvider
では機能しないようです。すべてのビューでデータを共有するために使用しています。ログイン中にAuth::user()
とAuth::check()
の両方をvar_dump
すると、NULL
とfalse
が表示されます。
AppServiceProvider
内の現在のユーザーを取得するにはどうすればよいですか?それが不可能な場合、すべてのビューで各ユーザーに固有のデータ(user_id
によって異なるデータ)を取得する方法は何ですか。明確にするためのコードを次に示します。
if (Auth::check()) {
$cart = Cart::where('user_id', Auth::user()->id);
if ($cart) {
view()->share('cart', $cart);
}
} else {
view()->share('cartItems', Session::get('items'));
}
Laravelセッションはミドルウェアで初期化されるため、リクエストライフサイクルでミドルウェアを実行するbeforeため、サービスプロバイダーからセッションにアクセスできません。
ミドルウェアを使用して、セッションの変数を共有する必要があります
その他の理由でサービスプロバイダーで実行する場合は、次のように、コールバックで view composer を使用できます。
public function boot()
{
//compose all the views....
view()->composer('*', function ($view)
{
$cart = Cart::where('user_id', Auth::user()->id);
//...with this variable
$view->with('cart', $cart );
});
}
コールバックは、ビューが実際に構成されているときにのみ実行されるため、ミドルウェアはすでに実行されており、セッションを利用できます。
AuthServiceProvider
のboot()
関数に、次のコード行を記述します
public function boot()
{
view()->composer('*', function($view)
{
if (Auth::check()) {
$view->with('currentUser', Auth::user());
}else {
$view->with('currentUser', null);
}
});
}
ここで*
は、すべてのビューで$currentUser
変数が使用可能であることを意味します。
次に、ビューファイル{{ currentUser }}
は、ユーザーが認証されている場合はユーザー情報を、それ以外の場合はnullを提供します。