有什么方法可以访问AppServiceProvider
中的会话值吗?我想在所有视图中全局共享会话价值。
您不能直接从服务提供商读取会话:在Laravel中,会话由StartSession
中间件处理,该中间件在所有服务提供商启动阶段之后执行
如果要与所有视图共享会话变量,可以使用服务提供商提供的视图编辑器:
public function boot()
{
view()->composer('*', function ($view)
{
$view->with('your_var', 'Session::get('var') );
});
}
作为第二个参数传递给作曲家的回调将在渲染视图时调用,因此此时StartSession
已经执行
添加新的 Web 中间件 ShareDataForView
in ''app''Http''Kernel.php:
protected $middlewareGroups = [
'web' => [
// ...
'Illuminate'Session'Middleware'StartSession::class,
// I will always ShareDataForView after StartSession
'App'Http'Middleware'ShareDataForView::class,
...
并在app''Http''Middleware''ShareDataForView.php的方法"句柄"中编写代码,例如:
<?php
namespace App'Http'Middleware;
use Illuminate'Support'Arr;
use Illuminate'Support'Facades'Auth;
use Illuminate'Support'Str;
use Closure;
use Log, Exception, View;
class ShareDataForView
{
/**
* Handle an incoming request.
*
* @param 'Illuminate'Http'Request $request
* @param 'Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = Auth::user();
$bank = NULL;
if ( $user ){
$bank = $user->bank;
}
View::share('user', $user);
session()->put(['bank' => $bank]);
return $next($request);
}
}
以下内容适用于我的 Laravel 5.2,它会导致您的应用程序出错吗?
应用服务提供商.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()
{
//
}
}
首页.刀锋.php
<h1>{{$lang}}</h1>
在浏览器中显示"en_US"。