Laravel - Service变量在服务提供者中为空

时间:2015-11-25 12:28:40

标签: php laravel session laravel-5 laravel-5.1

我正在尝试使用AppServiceProvider类与所有视图共享会话值。

boot()函数中,我说:view()->share('key', Session::get('key'));

但是,值为null。可能是什么问题?在Controller我设置它,它工作正常。即使在删除Session::put()行后,该值仍然在会话中(显然)。

1 个答案:

答案 0 :(得分:7)

在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中间件

之后执行