2016-05-22 4 views
6

Так что я обычно получаю текущего пользователя с помощью Auth::user() и когда я определяю, действительно ли пользователь зарегистрирован в Auth::check. Однако, похоже, это не работает в моем AppServiceProvider. Я использую его для обмена данными во всех представлениях. I var_dump и Auth::user() и Auth::check() при входе в систему, и я получаю NULL и false.Laravel - Как получить текущего пользователя в AppServiceProvider

Как я могу получить текущего пользователя внутри своего 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')); 
    } 
+0

Для этого вам нужно создать специальное промежуточное программное обеспечение, см. Обсуждения: https://laracasts.com/discuss/channels/laravel/using-auth-in-service-provider-to-get-user-object, https : //github.com/laravel/framework/issues/7906 – Burak

ответ

8

Laravel сессия инициализируется в ПО промежуточного слоя, так что вы не можете получить доступ к сеансу с поставщика услуг, так как они выполняют перед к промежуточному в жизненном цикле запроса

Вы должны использовать промежуточное программное обеспечение для обмена ваши varibles от сессии

Если по какой-то причине вы хотите сделать это в поставщике услуг, вы можете использовать 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);  
    }); 
} 

обратного вызова будет выполняться только тогда, когда точка зрения фактически состоит, таким образом промежуточное программное будет уже выполнена и сессия будет доступна

0

В AuthServiceProvider «s boot() функция написать эти строки кода

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

Здесь * означает - во всех ваших взглядах $currentUser переменная доступна.

Затем из файла вида {{ currentUser }} вы получите информацию о пользователе, если пользователь аутентифицирован иначе в противном случае.