Laravel 自定义验证

3

--- 自定义验证类(application/libraries/validator.php)---

 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);       
    }
}

--- application/language/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);
    }

--- 输入 ---

密码 = 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')) - David Barker
@DavidBarker,
数组 ( [0] => validation.passwdU )
- Sophy SEM
5
我找到了问题所在。在我的语言定义中,有一个键名为"passwdU" => "......"。但是在加载文件时,该键被转换为小写的"passwdu" => "..."。 - Sophy SEM
有道理,很高兴你解决了它。 - David Barker
1个回答

0
将消息传递方法传递给视图。
return Redirect::to('login')
    ->withErrors($validator->messages())

并使用get方法打印它

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

适用于我:

The email field is required.

1
由于Validator实现了MessageProviderInterface接口,因此传递->withErrors($validator)是相同的。 - giannis christofakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接