2016-05-22 33 views
6

Quindi di solito ottengo l'utente corrente usando Auth::user() e quando sto determinando se un utente è effettivamente connesso Auth::check. Tuttavia, questo non sembra funzionare nel mio AppServiceProvider. Lo sto usando per condividere i dati attraverso tutte le viste. I var_dump entrambi Auth::user() e Auth::check() durante l'accesso e ottengo NULL e false.Laravel - Come ottenere l'utente corrente in AppServiceProvider

Come posso ottenere l'utente corrente nel mio AppServiceProvider? Se ciò non è possibile, qual è il modo per ottenere dati che è univoco per ciascun utente (dati diversi in base allo user_id) in tutte le viste. Ecco il mio codice per chiarimenti.

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

È necessario creare un middleware personalizzato per questo, vedere le discussioni: https://laracasts.com/discuss/channels/laravel/using-auth-in-service-provider-to-get-user-object, https : //github.com/laravel/framework/issues/7906 – Burak

risposta

8

sessione laravel viene inizializzato in un middleware quindi non è possibile accedere alla sessione da un fornitore di servizi, in quanto eseguono prima il middleware nella richiesta di ciclo di vita

È necessario utilizzare un middleware per condividere i tuoi varibles dalla sessione

Se per qualche altro motivo che si desidera farlo in un fornitore di servizi, si potrebbe usare un view composer con un callback, come questo:

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

La richiamata viene eseguita solo quando la vista è effettivamente composto, così middleware saranno già eseguiti e sessione saranno disponibili

0

In AuthServiceProvider s' boot() funzione scrivere queste righe di codice

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

Qui * significa - in tutte le visualizzazioni è disponibile la variabile $currentUser.

Quindi, dal file di visualizzazione {{ currentUser }} verranno fornite le informazioni utente se l'utente è autenticato altrimenti null.