Laravel flash会话存储了两次数据

时间:2013-01-25 08:11:46

标签: laravel

这是一个头痛!根据我对laravel的flash方法的理解,一旦它被设置然后被调用,它将被销毁......

Session::flash( 'key', $data );

某处

{{ Session::get( 'key' ) }}

我正在使用它进行表单验证。现在当表单未验证时,应用程序显示错误,如果我修改表单并再次发布,数据库更新,详细信息显示正确,但错误再次出现!这是相同的,如果我发布未验证的表单,它会显示错误,但如果我然后单击同一页面的导航链接,它会再次显示!

有人碰到过这个吗?

问候

8 个答案:

答案 0 :(得分:7)

当我使用return view() / return View::Make时,我的Controller @ update方法应该是return redirect()->route(),我遇到了这个问题。

答案 1 :(得分:2)

在laravel文档中:

  

flash方法会在会话中存储一个项目,该项目将在下一个请求后过期。它对于存储状态或错误消息等临时数据非常有用。

这意味着,它可以在当前和下一个请求中使用。如果您访问它,它不会自动刷新。为此,请使用Session::flush('key');

答案 2 :(得分:1)

从Laravel 5.1开始,您可以使用now()方法,该方法只会影响当前请求:

Session::now('key', 'message');

session()->now('key', 'message');

答案 3 :(得分:1)

会话Flash保留了2个请求的会话数据,因为它是在重定向期间使用的。

但是,我遇到了一个用例,在下一个视图中,我确实只想对一个请求使用flash,并找到了一种简单的方法来实现,即从会话中获取而不是获取它。 Session::pull()获取会话数据并从会话中删除。

@if (Session::has('message'))
   <div class="alert alert-message">{{Session::pull('message'}}</div>
@endif

希望这会有所帮助!

答案 4 :(得分:0)

您的代码可能还有其他一些问题,如果您可以共享代码,则可以帮助我们更好地了解此问题。

您可以使用以下代码段将Flash错误消息发送到laravel刀片模板。

@if (Session::has('message'))

    <div class="alert alert-success">{{Session::get('message')}}</div>

@endif

答案 5 :(得分:0)

我曾经有过类似的问题,因为我在我的控制器中使用了Session::reflash()

确保您的控制器或应用程序中的任何位置没有Session::reflash(),因为它会闪烁整个会话...使用示例:Session::keep(array('username', 'email'));仅重新刷新Flash数据的子集

答案 6 :(得分:0)

在创建视图(而不是重定向)时,一种简单的方法来闪烁消息:

Session::flash($key, $value);
Session::push('flash.old', $key);

参考here.

答案 7 :(得分:0)

flash方法用于存储下一个请求的数据。理想情况下,在将数据刷新到会话后,您应该重定向到新路由。 (这是接受的答案所暗示的。)

但是,如果您没有重定向,则可以在刀片模板中显示会话后调用forget方法:

{{ session()->flash('key') }}

@php
    session()->forget('flash-info');
@endphp