Php Larvel:如何在AppServiceProvider中访问会话值?

Php Larvel:如何在AppServiceProvider中访问会话值?,php,laravel,session,laravel-5,laravel-5.1,Php,Laravel,Session,Laravel 5,Laravel 5.1,是否有任何方法可以访问AppServiceProvider中的会话值?我希望在所有视图中全局共享会话值。您不能直接从服务提供商读取会话:在Laravel中,会话由StartSession中间件处理,该中间件在所有服务提供商启动阶段后执行 如果要与all view共享会话变量,可以使用服务提供商提供的: public function boot() { view()->composer('*', function ($view) { $view->wi

是否有任何方法可以访问
AppServiceProvider
中的会话值?我希望在所有视图中全局共享会话值。

您不能直接从服务提供商读取会话:在Laravel中,会话由
StartSession
中间件处理,该中间件在所有服务提供商启动阶段后执行

如果要与all view共享会话变量,可以使用服务提供商提供的:

public function boot()
{
    view()->composer('*', function ($view) 
    {
        $view->with('your_var', \Session::get('var') );    
    });  
}

在呈现视图时,将调用作为第二个参数传递给composer的回调,因此此时已执行
开始会话
以下内容适用于我在Laravel 5.2上的工作,是否会导致应用程序出错

AppServiceProvider.php

class AppServiceProvider extends ServiceProvider
{
/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    \Session::put('lang', 'en_US');
    view()->share('lang', \Session::get('lang', 'de_DE'));
}

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    //
}
}
<h1>{{$lang}}</h1>
home.blade.php

class AppServiceProvider extends ServiceProvider
{
/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    \Session::put('lang', 'en_US');
    view()->share('lang', \Session::get('lang', 'de_DE'));
}

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    //
}
}
<h1>{{$lang}}</h1>
{{$lang}

在浏览器中显示“en_US”。

\session不工作,结果为空,例如我尝试了这个
print\r(\session::all())否results@Kaloyan:您确定没有在其他地方设置变量吗?我认为您无法从服务提供商处访问会话,因为它是在middleware@Moppo,是的,我没有在其他任何地方设置它,可能是在5.1和5.2之间发生了变化?似乎您可以从服务提供商处编写会话,但您无法读取它。在您的情况下,它的工作原理是您正在读取您在同一请求上直接设置的值。但是如果删除
\Session::put('lang','en_US')行并发出另一个请求,该值将不会从会话中读取。请检查我的更新answer@Moppo很好,谢谢,很好,谢谢