Я пытаюсь получить доступ к 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); }