2

我在 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'))但在我使用的事件中似乎无法访问会话数据。

4

2 回答 2

4

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

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

于 2019-03-14T17:57:58.323 回答
1

正确的做法是使用这句话 session()->get('profile'),例如在视图 {{ session()->get('profile') }} 中。

于 2019-03-14T17:37:35.813 回答