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_address
和postal_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 验证:检查验证器失败的原因的主要内容,如果未能解决你的问题,请参考以下文章