web-dev-qa-db-fra.com

Laravel - Comment obtenir l'utilisateur actuel dans AppServiceProvider

Donc, j'obtiens généralement l'utilisateur actuel en utilisant Auth::user() et quand je détermine si un utilisateur est réellement connecté Auth::check. Cependant, cela ne semble pas fonctionner dans mon AppServiceProvider. Je l'utilise pour partager des données sur toutes les vues. Je var_dumpAuth::user() et Auth::check() lorsque je suis connecté et j'obtiens NULL et false.

Comment puis-je obtenir l'utilisateur actuel dans mon AppServiceProvider? Si cela n'est pas possible, comment obtenir des données uniques pour chaque utilisateur (données différentes selon le user_id) Dans toutes les vues. Voici mon code de clarification.

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

La session Laravel est initialisée dans un middleware afin que vous ne puissiez pas accéder à la session à partir d'un fournisseur de services, car ils exécutent avant le middleware dans le cycle de vie de la demande

Vous devez utiliser un middleware pour partager vos variables de la session

Si, pour une autre raison, vous souhaitez le faire dans un fournisseur de services, vous pouvez utiliser un afficher le compositeur avec un rappel, comme ceci:

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

Le rappel ne sera exécuté que lorsque la vue est en cours de composition, donc les middlewares seront déjà exécutés et la session sera disponible

28
Moppo

Dans la fonction boot() de AuthServiceProvider, écrivez ces lignes de code

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

Ici * signifie - dans toutes vos vues $currentUser variable est disponible.

Ensuite, à partir du fichier de vue {{ currentUser }} vous fournira les informations utilisateur si l'utilisateur est authentifié sinon null.

6
Maniruzzaman Akash