我正在尝试使用AppServiceProvider
类与所有视图共享会话值。
在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
中间件