我想使用 AppServiceProvider
类来分享 Session 值给所有视图。
在 boot()
函数中,我设置了: view()->share('key', Session::get('key'));
但是,值为 null
。有什么问题吗?在控制器中我设置它,它工作得很好。即使删除了 Session::put()
行,值仍然存在于会话中(显然)。
我想使用 AppServiceProvider
类来分享 Session 值给所有视图。
在 boot()
函数中,我设置了: view()->share('key', Session::get('key'));
但是,值为 null
。有什么问题吗?在控制器中我设置它,它工作得很好。即使删除了 Session::put()
行,值仍然存在于会话中(显然)。
Laravel中的会话是在一个中间件中初始化的,该中间件由这个类处理:
\Illuminate\Session\Middleware\StartSession::class
当服务提供者启动时,由于所有中间件都在服务提供者启动阶段之后执行,此中间件尚未被执行。public function boot()
{
view()->composer('*', function ($view)
{
//this code will be executed when the view is composed, so session will be available
$view->with('key', \Session::get('key') );
});
}
这将起作用,因为回调函数在视图合成之前被调用,当中间件已经执行时,所以会话将可用。
通常要注意您的中间件执行顺序:如果您想从中间件访问会话,那么该中间件应在 Laravel 的 StartSession::class
中间件之后执行。
if ( !is_null($var) ) { //share it }
将语句包含在中间件中,因此在第一次调用中您将不会共享任何内容...不知道是否符合您应用程序的需求。 - Moppo