Sam*_*son 5 php laravel laravel-5.2
我试图找到是否有一种优雅的方法将数据从request-> input()传递到request-> session(); .我想要实现的是接收用户输入,然后我想在后续的http请求中重用它.
丑陋的方式:
我可以用丑陋的方式做到这一点:
$request->session()->put('name', $request->input('name'));
$request->session()->put('address', $request->input('address'));
$request->session()->put('age', $request->input('age'));
$request->session()->put('bed_time', $request->input('bed_time'));
Run Code Online (Sandbox Code Playgroud)
Laravelly方式:
但这似乎不太Laravelly,我觉得应该有一种方式,以便我可以做类似的事情:
$request->input()->persist();
Run Code Online (Sandbox Code Playgroud)
要么
$request->persistInput();
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在文档中找不到任何能让我更好地实现这一点的方法.有没有办法实现这个目标?或者我是否坚持使用这种丑陋的不可思议的方式将数据保存到会话中?
编辑:
我接受了杰夫的回答作为我问题的解决方案.其中部分详述了Laravelly解决此问题的方法.
$request->flash();
Run Code Online (Sandbox Code Playgroud)
以上是接收输入数据的请求的解决方案.但是在所有后续的http请求中,我需要包含以下内容,并访问这样的数据.
//This makes the data available for the next request.
$request->reflash();
// I can access the data from the last request using the 'old' method.
$name = $request->old('name');
$address = $request->old('address');
Run Code Online (Sandbox Code Playgroud)
每次我想要将数据传递到另一个请求时,我需要重新刷新.
Jef*_*ert 10
请参阅本手册页.它包括为下一个请求闪烁数据到会话,这可能是你所追求的:
$request->flash();
Run Code Online (Sandbox Code Playgroud)
这将获取所有旧的输入字段并将它们存储在会话的闪存数据中,并将它们保留在下一个请求中.例如,如果用户输入的数据未经验证且您希望使用旧数据重定向,则可以预先填充表单字段.实际上,有一种更简单的方法可以返回重定向并将相同的数据闪存到会话中:
return redirect()->back()->withInput();
Run Code Online (Sandbox Code Playgroud)
你甚至可以指定你的数据不希望保留:
return redirect()->back()->withInput($request->except('password'));
Run Code Online (Sandbox Code Playgroud)
更新
感谢@Rifki在评论中指出这一点,但是如果你想保留后续HTTP请求的数据并且你正在使用flash数据,那么在下一个请求中你可以告诉Laravel Session将数据保存到另一个请求:
$request->session()->reflash();
Run Code Online (Sandbox Code Playgroud)
但是,根据此数据的生存时间,您可能只想继续将数据永久存储到会话中.在本手册条目中查看可以检索输入的不同方法:
// Store all input
$request->session()->put('some_key', $request->all());
// Store a subset of input
$request->session()->put('some_key', $request->only(['field1', 'field2']));
// Store all except
$request->session()->put('some_key', $request->except('password'));
Run Code Online (Sandbox Code Playgroud)