web-dev-qa-db-ja.com

Laravel-AppServiceProviderで現在のユーザーを取得する方法

したがって、通常はAuth::user()を使用して現在のユーザーを取得しており、ユーザーが実際にAuth::checkにログインしているかどうかを確認しています。ただし、これは私のAppServiceProviderでは機能しないようです。すべてのビューでデータを共有するために使用しています。ログイン中にAuth::user()Auth::check()の両方をvar_dumpすると、NULLfalseが表示されます。

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'));
    }
16
Codearts

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

コールバックは、ビューが実際に構成されているときにのみ実行されるため、ミドルウェアはすでに実行されており、セッションを利用できます。

28
Moppo

AuthServiceProviderboot()関数に、次のコード行を記述します

public function boot()
{
    view()->composer('*', function($view)
    {
        if (Auth::check()) {
            $view->with('currentUser', Auth::user());
        }else {
            $view->with('currentUser', null);
        }
    });
}

ここで*は、すべてのビューで$currentUser変数が使用可能であることを意味します。

次に、ビューファイル{{ currentUser }}は、ユーザーが認証されている場合はユーザー情報を、それ以外の場合はnullを提供します。

6