2016-05-22 17 views
6

Bu nedenle, genellikle geçerli kullanıcı Auth::user() kullanarak ve bir kullanıcının gerçekte Auth::check oturum açmış olup olmadığını belirlerken alıyorum. Ancak bu benim AppServiceProvider'umda çalışmıyor gibi görünüyor. Tüm görünümler arasında veri paylaşmak için kullanıyorum. Giriş yaparken var_dump hem Auth::user() hem de Auth::check() ve NULL ve false olsun.Laravel - Geçerli kullanıcı AppServiceProvider'da nasıl edinilir

Geçerli kullanıcıyı AppServiceProvider benim için nasıl alabilirim? Bu mümkün değilse, her kullanıcı için (user_id'a göre farklı olan veriler) tüm görünümler için benzersiz olan verileri almanın yolu nedir? İşte açıklama için benim kodum.

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

Bunun için özel bir katman yazılımı oluşturmanız gerekir, tartışmalara bakın: https://laracasts.com/discuss/channels/laravel/using-auth-in-service-provider-to-get-user-object, https : //github.com/laravel/framework/issues/7906 – Burak

cevap

8
Bir Servis Sağlayıcı gelen oturumu erişemez böylece istek yaşam döngüsü içinde önce ortakatmanını yürütmek çünkü

laravel oturumda, bir katman içinde başlatılır

Sen paylaşmak için bir ara katman kullanmalıdır

oturumdaki Değişkenler

bir hizmet sağlayıcısı yapmak istiyorum başka bir nedenden dolayı, böyle bir geri arama ile bir view composer kullanabilirsiniz ise:

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

görünümü aslında oluşan ediliyor yalnızca ara katman zaten çalıştırılacak ve seans boot() fonksiyon kodunun bu satırları yazma

0

AuthServiceProvider 'nun hazırladığı kullanıma sunulması için geri arama, çalıştırılacaktır

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

Burada * anlamına gelir - tüm görünümlerde $currentUser değişken mevcuttur. Daha sonra, {{ currentUser }} görüntü dosyasından, kullanıcı kimliği doğrulanırsa Kullanıcı bilgisini verin aksi halde boş bırakın.

İlgili konular