Laravel:如何将会话数据标记为闪烁

时间:2017-11-06 22:54:41

标签: laravel session

我正在尝试预先填充表单上的输入,以便在Laravel 5.4中创建模型实体。但是表单是一个共享的刀片模板,其中包含相同模型的编辑表单,我想使用表单模型绑定来提供输入。

到目前为止,我实现此目的的方法是在控制器中将会话变量闪存到_old_input以创建路径: session()->flash('_old_input.description', $event->description);

这实现了我想要的,除了在请求结束时没有被清除。我的下一个请求仍然会闪烁会话数据。

我的问题是Laravel如何知道这是闪存消息的接收者而不是闪烁消息的输入?有没有办法告诉它我已经使用了会话闪存,应该在此请求结束时清理它...

2 个答案:

答案 0 :(得分:1)

您需要使用重定向来刷新会话...否则,您将最终使用闪存继续进行下一次请求...

您可以返回视图...例如

return redirect('view')->with('_old_input.description', $event->description);

或者你甚至可以重定向到控制器动作......比如

session()->flash('_old_input.description', $event->description);
return redirect()->action('MyController@function');

哪个也可以...关键是返回重定向响应......

希望这会有所帮助......

答案 1 :(得分:0)

Serge是正确的,闪存旨在用于将数据放入NEXT请求的会话中,因此重定向是正确的方法,我还将在这里提供解决方案,我曾经破解过我的方式。

Laravel将其闪存数据存储在会话数组中的_flash值中,其中的密钥将在new密钥下的NEXT请求中使用,以及在此请求中使用的密钥old键;见下面的摘录。

[_flash] => Array
    (
        [old] => Array
            (
            )

        [new] => Array
            (
                [0] => _old_input
            )
    )

使用session()->push('_flash.old', '_old_input');傻瓜Laravel认为这是从前一个请求中闪现的数据,并在周期结束时清除数据。

为了获得完整效果,您可以使用session()->forget('_flash.new.0');将其从新密钥中删除,但要注意这不一定是第一个闪存变量(在我的情况下是这样)。

因此我的总代码为:

session()->flash('_old_input', ['description' => $event->description]);
session()->push('_flash.old', '_old_input');
session()->forget('_flash.new.0');

再一次,Serge是正确的,但是如果有人来这里了解Laravel的闪烁是如何工作的并且想要绕过它,这里有一些信息