Поэтому я обычно получаю текущего пользователя с помощью Auth::user()
и когда я определяю, действительно ли пользователь зарегистрирован в Auth::check
. Однако, похоже, это не работает в моем AppServiceProvider
. Я использую его для обмена данными во всех представлениях. Я var_dump
как Auth::user()
и Auth::check()
во время входа в систему, и я получаю NULL
и false
.
Как я могу получить текущего пользователя внутри моего 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')); }
Сеанс Laravel инициализируется в промежуточном программном обеспечении, поэтому вы не можете получить доступ к сеансу от поставщика услуг, поскольку они выполняются перед промежуточным программным обеспечением в жизненном цикле запроса
Вы должны использовать промежуточное программное обеспечение для обмена вашими вариантами с сеанса
Если по какой-либо другой причине вы хотите сделать это у поставщика услуг, вы можете использовать композитор представления с обратным вызовом, например:
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 ); }); }
Обратный вызов будет выполнен только тогда, когда представление фактически составлено, поэтому middlewares будут уже выполнены и сеанс будет доступен
В AuthServiceProvider
boot()
AuthServiceProvider
пишите эти строки кода
public function boot() { view()->composer('*', function($view) { if (Auth::check()) { $view->with('currentUser', Auth::user()); }else { $view->with('currentUser', null); } }); }
Здесь *
означает – во всех ваших представлениях $currentUser
переменная $currentUser
.
Затем из файла вида {{ currentUser }}
вы получите информацию о пользователе, если пользователь аутентифицирован, иначе null.