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

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

Ответы [ 2 ]

3 голосов
/ 14 марта 2019

Что вы ищете, так это композиторы вида:

https://laravel.com/docs/5.8/views#view-composers

Если данные вашего сеанса недоступны в процессе загрузки поставщиков услуг (а это не так), вам следует использовать промежуточное ПО и определить его следующим образом:

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 = [...].

0 голосов
/ 14 марта 2019

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

...