Laravel 验证:检查验证器失败的原因

Posted

技术标签:

【中文标题】Laravel 验证:检查验证器失败的原因【英文标题】:Laravel Validation: check why validator failed 【发布时间】:2014-10-23 18:44:15 【问题描述】:

如果有办法检查验证器是否因unique 规则而失败?

$rules = array(
            'email_address' => 'required|email|unique:users,email',
            'postal_code' => 'required|alpha_num',
        );

        $messages = array(
            'required' => 'The :attribute field is required',
            'email' => 'The :attribute field is required',
            'alpha_num' => 'The :attribute field must only be letters and numbers (no spaces)'
        );

        $validator = Validator::make(Input::all(), $rules, $messages);

        if ($validator->fails()) 

通俗地说,我基本上想知道:“验证失败是因为 email_address 不是唯一的吗?”

【问题讨论】:

也许提供一个通过其他验证规则的输入? (并检查错误消息)。 但是您可以确切地看到我正在检查的输入...email_addresspostal_code 【参考方案1】:

检查返回的失败规则数组中的特定规则

if ($validator->fails()) 

    $failedRules = $validator->failed();

    if(isset($failedRules['email_address']['Unique'])) 

    ...

【讨论】:

转成json,好像返回"email_address":"Unique":["users","email"] 已更新。您必须按字段检查它,每个字段都有自己的规则数组。 几乎,但它仍然总是返回假,即使我可以看到它是真的。 更新了,规则Unique 是一个键,所以in_array 不起作用:) 所以我改用isset【参考方案2】:

这将显示错误并告诉您失败的原因:

控制器

if($validation->fails())

   return Redirect::back()->withErrors($validation)->withInput();


foreach($errors->all() as $error) 
  echo $error;

在你的刀片模板中添加这个:

   @foreach($errors->all() as $error)
        <div>
           $error
        </div>
   @endforeach

无论错误是什么,它都会返回一条消息。电子邮件不匹配。字段是必需的。呸呸呸

您还可以从 $message 中删除该电子邮件数组。验证器将为您处理所有这些。如果您想要自定义消息,您只想使用它。

你也可以尝试 var_dump 这个语句:

var_dump($validation->errors());死;

【讨论】:

是的,但在查看视图之前,我需要知道我的控制器发生了什么故障。 在您的控制器中,您可以使用相同的 foreach,它将显示在您的控制器中。我编辑了我的答案,所以你可以看到 $errors->all() 产生Call to a member function all() on a non-object 抱歉,这行不通,因为无论如何它都应该重定向回您的上一页。我会更新答案。 检查我的答案,您也许可以使用 var_dump($validation->errors()); 转储结果。死;

以上是关于Laravel 验证:检查验证器失败的原因的主要内容,如果未能解决你的问题,请参考以下文章

扩展/覆盖 Laravel 验证器类

编辑帐户中密码字段的 Laravel 4 验证器

Laravel 验证登录表单验证在密码确认中失败?

Laravel 5.5 - 图像验证不起作用

Keycloak - 授权验证失败。原因:无效令牌(错误的 ISS)

Laravel 验证器/上传的文件在要求时失败