Laravel: How to access session value in AppService

2020-03-11 06:49发布

Is there any way available to access Session values in AppServiceProvider? I would like to share session value globally in all views.

2条回答
虎瘦雄心在
2楼-- · 2020-03-11 07:19

The following works for me on Laravel 5.2, is it causing errors on your app?

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()
{
    //
}
}

home.blade.php

<h1>{{$lang}}</h1>

Shows "en_US" in the browser.

查看更多
一夜七次
3楼-- · 2020-03-11 07:34

You can't read session directly from a service provider: in Laravel the session is handled by StartSession middleware that executes after all the service providers boot phase

If you want to share a session variable with all view, you can use a view composer from your service provider:

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

The callback passed as the second argument to the composer will be called when the view will be rendered, so the StartSession will be already executed at that point

查看更多
登录 后发表回答