[英]Laravel 5.1 flash message handling
在Laravel 5.0和4. *中,有此选项可检查会话是否具有flash_messages:
控制器:
public function store(Request $request) {
Session::flash('flash_message', 'Success');
return redirect('somepage');
}
然后,您可以在布局中调用它:
@if (Session::has('flash_message'))
<p>{{ Session::get('flash_message') }}</p>
@endif
这工作得很好,但是在Laravel 5.1中改变了。 现在,它存储在request变量中。 因此,我在控制器中将其更改为:
public function store(Request $request) {
$request->session()->flash('flash_message', 'Success');
return redirect('somepage');
}
我在布局中称其为:
@if($request->session()->has('flash_message'))
<p>{{ $request->session()->get('flash_message') }}</p>
@endif
我正在完全按照Laravel 5.1文档中的说明进行操作:
确定会话中是否存在项目
has方法可用于检查会话中是否存在项目。 如果该项存在,则此方法将返回true:
if ($request->session()->has('users')) { // }
现在,这对于现在的存储方法来说是完美的,因为我只在其中添加了flash_message,但是如果我想访问另一个方法,例如索引,创建,编辑等,则会显示此错误:
ErrorException
未定义的变量:请求
我知道在其他方法中未声明请求变量,并且可以使用isset($request)
解决此if语句。
有没有更好的解决方案来检查是否在$request
变量中设置了我的flash_message,就像Laravel的早期版本一样?
听起来您正在使用Laravel生成的控制器。
如果查看store
和update
的方法定义,则会发现参数Request $request
。 通过包含此Laravel,可以自动为您创建一个Request
实例。
为了以其他方法访问此方法,您有三个选择:
将相同的参数添加到任何其他方法定义中,Laravel将以相同的方式为您生成该参数。
创建一个构造函数,并使其将Request
实例分配给属性。
public function __construct(Request $request)
{
$this->request = $request;
}
声明use Session;
在类定义之前,以使Session
类可在您的命名空间中访问。
您仍然可以使用旧方法:)。 最新的laravel刚刚添加了实现该目标的新方法。此处的示例代码显示错误消息,这些错误消息作为Flash消息传递到视图页面中。
@if ($message = Session::get('success'))
<div class="alert alert-success alert-block">
<button type="button" class="close" data-dismiss="alert">×</button>
<h4>Success</h4>
@if(is_array($message))
@foreach ($message as $m)
{{ $m }}
@endforeach
@else
{{ $message }}
@endif
</div>
@endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.