2014-08-29 113 views
5

如果有办法检查验证程序是否由于unique规则而失败?Laravel验证:检查验证者验证失败的原因

$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不是唯一的吗?”

+0

返回的数组中的特定规则也许提供通过其他验证规则的输入? (并检查错误消息)。 – 2014-08-29 17:51:50

+0

但是你可以确切地看到我正在检查什么输入......'email_address'和'postal_code' – dcolumbus 2014-08-29 18:19:57

回答

12

检查的失败规则

if ($validator->fails()) { 

    $failedRules = $validator->failed(); 

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

    ... 
+0

转换为json,它似乎返回'{“email_address”:{“Unique”:[“users”,“email”]}}' – dcolumbus 2014-08-29 19:10:53

+0

已更新。你必须通过现场检查它,每个领域都有自己的规则阵列。 – 2014-08-29 19:28:58

+0

差不多,但它仍然总是返回假,即使我可以看到它是真的。 – dcolumbus 2014-08-29 19:43:03

1

这将显示一个错误,告诉你什么失败:

控制器

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 

这会返回一个信息无论错误是什么。电子邮件不符。字段是必需的。 Blah blah

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

您也可以尝试的var_dump这样一句话:

的var_dump($ validation->错误());死;

+0

是的,但是我需要知道在我的控制器内失败之前,在进入视图之前。 – dcolumbus 2014-08-29 18:54:21

+0

那么在你的控制器中,你可以使用同样的foreach,它会显示在你的控制器中。我编辑我的答案,所以你可以看到 – Lynx 2014-08-29 18:56:47

+0

$ errors-> all()产生'调用一个非对象的成员函数all()' – dcolumbus 2014-08-29 19:00:31