Mar*_*jes 6 php session laravel laravel-5 laravel-5.1
我正在尝试使用AppServiceProvider类与所有视图共享会话值.
在boot()我说的功能中:view()->share('key', Session::get('key'));
但是,价值是null.可能是什么问题?在Controller我设置它,它工作正常.即使在删除该Session::put()行之后,该值仍然在会话中(显然).
在Laravel中,会话在由此类处理的中间件中初始化:
\Illuminate\Session\Middleware\StartSession::class
Run Code Online (Sandbox Code Playgroud)
引导服务提供程序时,此中间件尚未执行,因为所有中间件都在服务提供程序引导阶段之后执行
因此,您可以创建中间件并从那里共享会话变量,而不是从服务提供者共享变量,或者您可以在服务提供者中使用带有回调的视图编辑器:
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') );
});
}
Run Code Online (Sandbox Code Playgroud)
这将起作用,因为在组成视图之前将调用回调,当中间件已经被执行时,因此会话将是可用的
一般来说,注意你的中间件的执行顺序:如果你想从中间件访问会话,那应该在Laravel的StartSession::class中间件之后执行