Где проверить, вошел ли пользователь в приложение Laravel? - PullRequest
0 голосов
/ 10 февраля 2019

Я пользуюсь вашим советом и View :: делюсь всеми своими важными данными со всеми представлениями.Однако есть одна проблема, с которой я столкнулся.

Этот код:

if(!Auth::guest()){
            $user=Auth::user()->id;
        }
        else $user=0;
        $temp=DB::select('query');


        View::share('cartnumber', count($temp));
        View::share('cartitems', $temp);

не работает, если поместить его в AppServiceProvider.Или, что лучше, он всегда устанавливает $ user = 0, даже если я вошел в систему. Я думал, что это потому, что функция загрузки AppServiceProvider выполняется до того, как сайт проверяет, вошел ли кто-то в систему.

Затем я попытался использовать BaseController.с функцией конструкции, но это тоже не работает.Единственное решение, которое, кажется, работает правильно - это поместить код в каждый отдельный контроллер для каждого представления!Это действительно работает, что подтверждает мою теорию.

Но есть ли где-нибудь, где я могу поместить этот код без необходимости копировать / вставлять его в каждый контроллер?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Скорее всего, вы захотите поместить этот код позже в жизненный цикл запроса, чтобы гарантировать аутентификацию пользователя, поскольку, как уже упоминали другие, код промежуточного программного обеспечения / сеанса не происходил во время этой части загрузки среды.Вы можете использовать класс обслуживания для вызова всех ваших контроллеров, чтобы избежать вставки копии.Или, если вы хотите добиться этого с помощью кода в вашем поставщике услуг, вы можете использовать View Composer вместо общего ресурса, это позволяет вам определить обратный вызов или класс, который будет вызываться непосредственно перед возвратом представления

view()->composer(['/uri-that-needs-data'], function ($view) {
     if (Auth::check()) {
         $cart = DB::query(...)->get();
         $view->with('cartitems', $cart);                
     }

 });

Проверьте https://laravel.com/docs/5.7/views#view-composers для более подробной информации.

0 голосов
/ 10 февраля 2019

Auth::user() будет пустым до тех пор, пока промежуточное программное обеспечение сеанса не будет запущено.

Ваши поставщики услуг будут вызываться до того, как запрос будет отправлен через обработчики ответов, , включая промежуточное программное обеспечение , потому что поставщики услуг несут ответственностьдля настройки или «начальной загрузки» таких служб приложений, как файловые системы, драйверы кеша и т. д.

После того, как приложение было загружено и все поставщики услуг зарегистрированы, запрос будет переданроутер для диспетчеризации.Маршрутизатор отправит запрос на маршрут или контроллер, а также запустит любое промежуточное программное обеспечение для конкретного маршрута.

Источник: https://laravel.com/docs/5.7/lifecycle

Если вы не хотите копировать /вставьте этот код повсюду, а затем поместите его в промежуточное ПО для пользовательских маршрутов.Убедитесь, что он работает после промежуточного программного обеспечения auth, чтобы гарантировать, что вошел зарегистрированный пользователь.


Редактировать: Просмотр композиторов - еще один действительно хороший вариант, как предложено @ surgiie

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...