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') 在这种情况下不起作用吗?

谢谢!

【问题讨论】:

你能添加你的验证逻辑吗? 另外你不需要传递任何参数给-&gt;withInput(); 而不是return view(),你需要return redirect();返回视图将加载一个新页面。 您可以重定向到生成您的第二页的控制器方法return redirect()-&gt;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

Laravel 5.8 Eloquent Create() 返回错误的 ID

Laravel 5.8 验证 - 始终遵守任何规则

Laravel 5.8 文件上传使用 PUT 方法和 ajax