如何从会话数据创建Laravel全局变量并在所有视图中可用?

时间:2019-03-14 17:00:07

标签: laravel laravel-events laravel-session

我在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 个答案:

答案 0 :(得分:3)

您正在寻找的是视图作曲家:

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

答案 1 :(得分:0)

正确的方法是在句子{{session()-> get('profile')}}中使用此句子session()-> get('profile')。