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



我正在尝试在Laravel 5.4中为创建模型实体预先填充表单上的输入。但该表单是一个共享的刀片模板,具有相同模型的编辑表单,我希望使用表单模型绑定来提供输入。

到目前为止,我实现这一点的方法是将会话变量闪存到创建路由的控制器中的_old_inputsession()->flash('_old_input.description', $event->description);

这正是我想要的,除了在请求结束时没有被清除。我的下一个请求仍然刷新了会话数据。

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

您需要使用重定向来刷新会话。。。否则,您将在下一个请求中保留闪光灯。。。

您可以返回视图。。。像

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

或者你甚至可以重定向到控制器操作。。。像

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

这也会起作用。。。关键是返回重定向响应。。。

希望这能帮助。。。

Serge正确地认为,flash旨在将数据放入NEXT请求的会话中,因此重定向是正确的方法,我也将在这里提供我用来破解这一问题的解决方案。。。

Laravel将其闪存数据存储在会话阵列中的_flash值中,在new密钥下的NEXT请求中使用的密钥,以及在old密钥中的THIS请求中使用过的密钥;请参阅以下摘录。

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

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

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

因此,我的总代码是:

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

同样,Serge是正确的,但如果有其他人来这里了解Laravel的闪光是如何工作的,并想绕过它,这里有一些信息

最新更新