Как создать глобальную переменную Laravel из данных сеанса и сделать ее доступной во всех представлениях?

Я устанавливаю данные сеанса при входе в систему в 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')), но данные сеанса, похоже, еще не доступны в событиях, которые я использовал.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
0
1 518
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

правильный способ сделать это - использовать это предложение session()->get('profile'), например, в представлении {{ session()->get('profile') }}.

Спасибо - правильно, это возвращает данные сеанса в лезвии. Я хотел бы установить сеанс («профиль») в качестве глобальной переменной $profile перед запуском блейдов, чтобы внутри блейда разработчик мог легко использовать $profile вместо более подробного session(...)

tgrass 14.03.2019 18:41
Ответ принят как подходящий

То, что вы ищете, это просмотр композиторов:

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.

tgrass 15.03.2019 02:38

я отредактировал ответ и добавил пример промежуточного программного обеспечения

Flame 15.03.2019 11:12

Другие вопросы по теме