繁体   English   中英

Laravel 5.1 Flash消息处理

[英]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生成的控制器。

如果查看storeupdate的方法定义,则会发现参数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">&times;</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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM