Laravel 5.8 验证错误返回到所有输入的特定视图-> 旧的不起作用
Posted
技术标签:
【中文标题】Laravel 5.8 验证错误返回到所有输入的特定视图-> 旧的不起作用【英文标题】:Laravel 5.8 on validation error return to specific view with all input -> old not working 【发布时间】:2019-09-26 12:09:43 【问题描述】:TLDR;
(在 Laravel 5.8 中)出现验证错误时,如何返回包含所有输入和错误的特定视图?
我正在创建一个多步骤表单,我需要在其中验证每个步骤的输入。因此,我将第一个页面创建为创建,然后将后续页面进行更新。
在第二页上,当验证器失败时,我将返回特定视图,因为我希望它转到此部分而不是表单的开头。我还返回错误和失败的输入。
控制器:
if ($validator->fails())
return view('partials.question_02_' . $type)
->with('type', $type)
->with('id', $id)
->withErrors($validator)
->withInput($request->all());
这是我的验证逻辑:
$validator = Validator::make($request->all(), [
'email' => 'required',
'first_name' => 'required',
'last_name' => 'required',
'phone' => 'required',
]);
有了这个,我可以返回到特定的视图和验证错误。但是,我无法接收旧输入。
Blade 中的以下内容将显示存在错误(出现 error 类),但不会显示旧输入。
<input class="@if ($errors->has('first_name')) error @endif"
type="text" name="first_name" placeholder="First Name" value=" old('first_name') ">
*注意,为了清晰起见,我只放了两行
奇怪的是,如果我死掉并转储请求,我可以看到所有输入:
dd($request->all());
但是,如果我尝试从会话中获取它,我看不到任何输入:
@if($errors)
var_dump(Session::all())
@endif
知道为什么 old('first_name') 在这种情况下不起作用吗?
谢谢!
【问题讨论】:
你能添加你的验证逻辑吗? 另外你不需要传递任何参数给->withInput();
而不是return view(),你需要return redirect();返回视图将加载一个新页面。
您可以重定向到生成您的第二页的控制器方法return redirect()->action('LoginController@secondPage');
太棒了!有效!我不得不在“action”标签中添加一些参数,但它奏效了! :) :) 非常感谢@AdityaThakur!如果您愿意,可以回复,我会将其标记为正确答案。
【参考方案1】:
您正在返回一个视图 return view()
,而您需要返回重定向 return redirect()
,因为返回视图将生成一个新页面,而 old() 将不起作用。
所以不是
return view('partials.question_02_' . $type)
使用
return redirect()
&在你的情况下
redirect()->action('LoginController@secondPage'); //you controller and method handling your second page
【讨论】:
以上是关于Laravel 5.8 验证错误返回到所有输入的特定视图-> 旧的不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.8 验证在使用 Passport 失败后返回首页
Laravel 5.8访问错误messageBag进行数组验证
请求的身份验证范围不足。使用谷歌日历和 laravel 5.8