【问题标题】:Laravel - getting the validation errorLaravel - 获取验证错误
【发布时间】:2016-05-10 20:05:32
【问题描述】:

在 Laravel 中,有没有办法知道哪个规则无效。例如:

'email': 'email|max:20'

假设我想知道电子​​邮件最大规则是否失败

【问题讨论】:

  • 您可以自定义您的验证消息,以便您可以为电子邮件max设置自定义消息。更多详细信息请参阅此博客cubettech.com/blog/… 如何自定义验证消息?
  • 我不想更改消息,我想知道 'email.max' 到底是什么规则被破坏了

标签: php laravel


【解决方案1】:

默认情况下,所有验证错误都会闪现到会话中,并可通过模板中的 $errors 数组获得。每个失败的规则都会产生一个单独的错误。

使用 Bootstrap 类显示错误的示例,取自文档。将其放在 Blade 模板中的某个位置:

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

official documentation查看更多详情

【讨论】:

  • 错误将包含规则消息,但不包含失败的规则。喜欢:'mail.max'
  • 是的,因为通常最终用户不需要知道规则名称。但是您可以 1) 更改默认消息并包括规则名称,例如。 $messages = ['email.required' => 'email.required']; 2) 扩展 Validator 类并正确添加此功能。这完全取决于您的要求(问题中未披露)
  • 如果您绝对确定要在输出数组中看到规则名称而不是正确的错误消息,只需覆盖 Validator 的 addError() 方法,例如:protected function addError($attribute, $rule, $parameters) { $this->messages->add($attribute, $attribute.'.'.$rule); }
  • 我不想覆盖该消息。我想做的是在违反最大规则时执行不同的逻辑,在违反电子邮件规则时执行其他逻辑。
  • 如果不扩展 Validator 类,恐怕你无法做到这一点。 Laravel 的美妙之处——添加你自己的扩展很容易。没有扩展的肮脏方式是 - 按照我之前的建议制作自定义错误消息,然后解析 $error 数组并对不同的消息做出不同的反应。您将能够为您的电子邮件规则违规触发一些特殊的事情。但这不是一种很好的做事方式,它更像是一种黑客/解决方法
【解决方案2】:

如果您想获得考虑特定字段的错误消息,请在messages 数组上提及验证对象的名称keyRef

如果验证失败,您可以从验证器中检索错误消息。

if ($validator->fails())
{
    $messages = $validator->messages();    
}

echo  $messages;

您还可以访问一组失败的验证规则,而不显示消息。为此,请使用失败的方法:

$failed = $validator->failed();

检索字段的所有错误消息

foreach ($messages->get('email') as $message)
{
    //
}

【讨论】:

  • 我不想要我想要密钥的消息,例如 mail.max。
  • 是的,我收到了消息,但没有收到失败的规则
  • 获取rule的目的是什么?
  • 在条件之外回显 $messages
【解决方案3】:

在我看来,最好对电子邮件 max 使用自定义验证消息。我假设你正在这样做

$data = 'data_to_validate';
$rule  = array('email': 'email|max:20') ;
$validator = Validator::make($data,$rule);

像这样为电子邮件max 添加自定义验证

$message = array('email.max' =&gt; 'Exceeded max. email length');

新的验证器

$validator = Validator::make($data,$rule,$message);

现在如果$validator-&gt;fails() 用于电子邮件max,那么$validator-&gt;messages() 将显示您的自定义验证。这样你就可以知道你的max 规则失败了。

【讨论】:

  • 这是一个开销,如果用内置的验证 s 来获得它会很好
猜你喜欢
  • 2016-05-27
  • 2021-06-19
  • 2015-08-06
  • 2018-09-05
  • 2013-10-31
  • 1970-01-01
  • 2016-03-28
相关资源
最近更新 更多