我使用带有验证器facade的Laravel 7来验证表单提交。验证工作正常;但是,我看不出在哪里可以访问旧的表单信息来重新填充用户已经填写的字段。我可以看到->withErrors()
传递的错误,但我看不到来自->withInput()
的任何输入。
这是在我的控制器方法中://验证响应$validator=验证器::make($request->all((['question_1'=>'必需’,'question_2'=>'必需’,'question_3'=>'必需’,'question_4'=>'必需’,'question_5'=>'必需’,]);
if ($validator->fails()) {
return redirect('/')
->withErrors($validator)
->withInput();
}
然而,当我调试模板中的变量时,我看不到旧的输入数据:
@if($errors->any())
{{ dd( get_defined_vars()['__data'] ) }}
@foreach ($errors->all() as $error)
{{ $error }}<br/>
@endforeach
@endif
array:4 [▼
"__env" => IlluminateViewFactory {#290 ▶}
"app" => IlluminateFoundationApplication {#2 ▶}
"errors" => IlluminateSupportViewErrorBag {#351 ▶}
"questions" => IlluminateDatabaseEloquentCollection {#1319 ▶}
]
在上面的调试输出中,我得到了带有错误消息的errors
键,但在变量中的任何位置都看不到旧的输入。questions
键是传递给模板的数据库结果的集合,而不是旧的输入。
验证失败后,如何访问用户提交的旧表单输入?
这是一个微笑的问题,还有一些有用的答案:如何通过输入重定向回表单-Laravel 5您可以使用:
return redirect()->back()->withInput(Input::all())
在HTML中,您必须使用value = {{ old('') }}
。如果不使用它,就无法取回值,因为会话将存储在它们的缓存中。
<input type="text" name="name" value="{{old('name') }}" />