Я устанавливаю данные сеанса при входе в систему в LoginController следующим образом:
class LoginController extends Controller{
protected function authenticated($request, $user){
$record = ['name'=>'bob'];
session(['profile' => $record]);
}
}
Сессия доступна в любом блейде:
$profile = session('profile');
Как сделать, чтобы переменная $profile была доступна на всех блейдах?
Я пытался использовать прослушиватели событий и View::share( 'profile', session('profile')), но данные сеанса, похоже, еще не доступны в событиях, которые я использовал.






правильный способ сделать это - использовать это предложение session()->get('profile'), например, в представлении {{ session()->get('profile') }}.
То, что вы ищете, это просмотр композиторов:
https://laravel.com/docs/5.8/views#view-композиторы
Если ваши данные сеанса недоступны в процессе загрузки поставщиков услуг (а это не так), вы должны использовать промежуточное программное обеспечение и определить его следующим образом:
https://laravel.com/docs/5.8/middleware#registering-middleware
// App\Http\Middleware\MyMiddleware.php
class MyMiddleware
{
public function handle($request, Closure $next, $guard = null)
{
$profile = session('profile');
View::share('profile', $profile);
// Important: return using this closure,
// since this is all part of a chain of middleware executions.
return $next($request);
}
}
Затем убедитесь, что ваше промежуточное ПО загружено в App\Http\Kernel.php (например, в глобальный стек промежуточного ПО protected $middleware = [...].
Спасибо - прочитайте оба сейчас. Можете ли вы уточнить: «следует использовать промежуточное программное обеспечение и определять его таким образом». В AppServiceProvider я добавил в boot() следующее: $profile=session('profile'); View::share('profile', $profile); и я зарегистрировал глобальное промежуточное ПО для всех запросов, но мне непонятно, что и как я должен определить в ServiceProvider.
я отредактировал ответ и добавил пример промежуточного программного обеспечения
Спасибо - правильно, это возвращает данные сеанса в лезвии. Я хотел бы установить сеанс («профиль») в качестве глобальной переменной
$profileперед запуском блейдов, чтобы внутри блейда разработчик мог легко использовать$profileвместо более подробногоsession(...)