Как в laravel получить доступ к сессии из сервис-провайдера?
Как в laravel получить доступ к сессии из сервис-провайдера ?
Получить в хедер переменную $orders .
Сессия в файлах есть , но в AppServiceProvider
dd(session('item')) = null.
public function boot()
{
$orders = Order::where('id',session('item'))->first();
View::share([
'orders'=> $orders,
]);
}
По-хорошему такую логику стоит переместить в миддлвару или в экшен контроллера. Сессия в ларавеле может инициализироваться позже чем вызывается сервис провайдер.
Необязательно использовать Middleware.
Что бы решить эту проблему, вам нужно создать отдельный класс Композера и забиндить его в этом методе boot.
public function boot()
{
View::composer('ваш шаблон', СозданныйКлассКомпозера::class);
}
В созданном классе, в методе compose() можете получить доступ к сессии
public function compose(View $view)
{
$orders = Order::where('id',session('item'))->first();
$view->with(compact('orders'));
}
В документации всё описано как сделать.
Разница в том, что вы в boot() только биндите класс, который будет использован при выводе шаблона и на этапе формирования шаблона сессия уже будет доступна.
Вы можете создать blade компонент https://laravel.com/docs/8.x/blade#components который будет представлять ваш layout, на других страницах наследоваться от него и указывать содержимое. В классе компонента вы сможете обратиться к сессии