Laravel 5.4: войти в идентификатор пользователя внутри __construct ()

Я пытаюсь получить доступ к Auth::user()->id; внутри конструктора, но он всегда возвращает ошибку. Попытка получить свойство не-объекта . Я изучаю в документации laravel, что сеанс недоступен внутри конструктора, а также поиск по SO для этого. Мне нужно войти в идентификатор пользователя внутри конструктора, потому что мне нужно получить данные из базы данных и сделать его доступным для всего его метода. Мой текущий код:

 public function __construct(){ $this->middleware('auth'); $induction_status = TrainingStatusRecord::where('user_id',Auth::user()->id)->where('training','=','induction')->get(); View::share('ind_status',$induction_status); } 

Есть ли способ (простой способ) войти в идентификатор пользователя внутри конструктора.

Буду признателен за любую помощь.

Спасибо

Чтобы использовать переменную, AppServiceProvider – хороший подход

Перейдите в App \ Providers \ AppServiceProvider.php

Включить фасад в верхней части страницы

 use Illuminate\Support\Facades\Auth; use App\TrainingStatusRecord; 

и вставьте ниже код в метод загрузки

 view()->composer('*', function($view){ if(Auth::user()){ $induction_status = TrainingStatusRecord::where('user_id',Auth::user()->id)->where('training','=','induction')->get(); View::share('induction_status',$induction_status); } }); 

Теперь вы сможете получить переменную $induction_status в своем приложении.

Ссылка https://laravel.com/docs/5.4/providers#the-boot-method

Надеюсь, это поможет вам.

Чтобы решить эту проблему, App\Providers\AppServiceProvider действительно была моей первой догадкой. Это будет работать в основном, но с исключением доступа к данным Session .

Поэтому, если вы попытаетесь получить доступ к данным Session в методе загрузки AppServiceProvider, вы получите null . Поэтому, чтобы сделать это, он отлично работает в любом случае. Middleware – хороший вариант. Вы можете написать эту логику обмена переменной ко всем вашим желаемым представлениям. Просто создайте middleware и routegroup в свой route или routegroup .

Попробуй это:

 public function __construct(){ $this->middleware(function ($request, $next) { $induction_status = TrainingStatusRecord::where('user_id',Auth::user()->id)->where('training','=','induction')->get(); } View::share('induction_status',$induction_status); }