2012-12-09 241 views
3

---自定义验证类(应用程序/库/ validator.php)---Laravel自定义验证

class Validator extends Laravel\Validator { 
    public function validate_passwdU($attribute, $value, $parameters){ 
     $r_uppercase = '/[A-Z]/'; //Uppercase 
     $default_min = 1; 
     if(is_numeric($parameters[0])>=$default_min){ 
     $default_min = $parameters[0]; 
     } 
     return (preg_match_all($r_uppercase,$value, $matches)>=$default_min);  
    } 
} 

---应用程序/语言/ EN/validation.php ---

"passwdU" => "The :attribute must be at least :size uppercase characters." 

--- ---控制器

$rules = array(
     'passwd' => 'required|min:8|passwdU:2' 
    ); 

    $validation = Validator::make($input, $rules); 

    if ($validation->fails()) 
    { 
     return Redirect::to('URL')->with_errors($validation); 
    } 

--- ---输入

的passwd = 11111111

--- ---查看

<pre> 
<?php print_r($errors); ?> 
</pre> 

--- ---输出

Laravel\Messages Object 
(
    [messages] => Array 
    (
     [passwd] => Array 
      (
       [0] => validation.passwdU 
      ) 

    ) 
    [format] => :message 
) 

为什么我没有获取我在语言文件中定义的消息?

+1

作为它的消息对象发送回你尝试'print_r($ errors-> get('passwd'))' –

+0

@DavidBarker,\t Arr ay ( [0] => validation.passwdU ) –

+5

我发现这个问题,在我定义的语言“passwdU”=>“......”中,当文件被加载时,密钥被转换为小写“passwdu”=>“...”。 –

回答

0

传递消息的方法给视图

return Redirect::to('login') 
    ->withErrors($validator->messages()) 

,并用GET方法

{{ $errors->get('email') }} 

为我工作在打印:

The email field is required. 
+1

这是因为'Validator'类*实现*'MessageProviderInterface' *接口*,传递' - > withErrors($ validator)'''。 –