2016-05-22 1 views
6

Donc, je reçois habituellement l'utilisateur actuel en utilisant Auth::user() et quand je détermine si un utilisateur est effectivement connecté Auth::check. Cependant, cela ne semble pas fonctionner dans mon AppServiceProvider. Je l'utilise pour partager des données sur toutes les vues. I var_dump à la fois Auth::user() et Auth::check() tout connecté et je reçois NULL et false.Laravel - Comment obtenir l'utilisateur actuel dans AppServiceProvider

Comment puis-je obtenir l'utilisateur actuel dans mon AppServiceProvider? Si cela n'est pas possible, quel est le moyen d'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')); 
    } 
+0

Vous devez créer un middleware personnalisé pour cela, voir les discussions: https://laracasts.com/discuss/channels/laravel/using-auth-in-service-provider-to-get-user-object, https : //github.com/laravel/framework/issues/7906 – Burak

Répondre

8

séance Laravel est initialisé dans un middleware de sorte que vous ne pouvez pas accéder à la session d'un fournisseur de services, parce qu'ils exécutent avant le middleware dans le cycle de vie de la demande

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

Si pour une autre raison que vous voulez faire dans un fournisseur de services, vous pouvez utiliser un view composer 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ée que lorsque la vue est effectivement composé, de sorte intergiciels seront déjà exécutés et de la session seront fonction disponible

0

Dans AuthServiceProvider « s boot() écrire 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. Puis, à partir du fichier de vue {{ currentUser }}, vous obtiendrez les informations de l'utilisateur si l'utilisateur est authentifié sinon nul.