Laravel-会话变量在服务提供程序中为null


Laravel - Session variable is null in Service Provider

我正在尝试使用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中间件

之后执行