我正在尝试预先填充表单上的输入,以便在Laravel 5.4中创建模型实体。但是表单是一个共享的刀片模板,其中包含相同模型的编辑表单,我想使用表单模型绑定来提供输入。
到目前为止,我实现此目的的方法是在控制器中将会话变量闪存到_old_input
以创建路径:
session()->flash('_old_input.description', $event->description);
这实现了我想要的,除了在请求结束时没有被清除。我的下一个请求仍然会闪烁会话数据。
我的问题是Laravel如何知道这是闪存消息的接收者而不是闪烁消息的输入?有没有办法告诉它我已经使用了会话闪存,应该在此请求结束时清理它...
答案 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的闪烁是如何工作的并且想要绕过它,这里有一些信息