Поэтому я обычно получаю текущего пользователя с помощью 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.