我有一个设置会话变量的提供程序:
public function boot()
{
$this->app->singleton('selectedPlatform', function($app) {
$sp = Session('platform', 0);
try {
$p = $sp == 0 ? new Platform : Platform::findOrFail($sp);
} catch(ModelNotFoundException $error) {
abort(404);
}
return $p;
});
}
当我使用
app('selectedPlatform')
我得到了一个正确的平台类模型:
<select name="platformSelector" id="platformSelector" class="form-control">
<option value="0">Seleccione una plataforma</option>
@foreach(\App\Models\Platform::all() as $platform)
<option value="{{$platform->id}}" @if(app('selectedPlatform')->id == $platform->id) selected="selected" @endif>{{ $platform->name }}</option>
@endforeach
</select>
我正在尝试制作一个中间件,在这个中间件中,我检查是否选择了一个平台(只是不等于0),如果没有,我会向用户发送一个flash。
我的问题是当我使用
应用程序(“selectedPlatform”)
在中间件上,会话var失去了它的值。
public function handle($request, Closure $next)
{
$selected = app('selectedPlatform');
if ($selected instanceof Platform)) {
FlashMessage::addInfo('You must select a platform', 'Unselected platform');
}
return $next($request);
}
我试着评论完整的if,只留下第一行
$selected = app('selectedPlatform')
同样的结果。这确保了FlashMessage类不是这里的问题。
根据
laravel lifecycle
首先核心加载服务容器(包括服务提供者),然后加载中间件。在中间件中,如果我编写
dd($selected)
我得到了平台的一个实例,所以var有正确的数据。
我错过了什么?也许在中间件中调用会话变量值会删除它的值?