尝试在laravel 4中创建自定义验证

时间:2014-02-16 18:30:15

标签: php validation laravel

我正在尝试在laravel 4中创建自定义验证规则,并且正在努力让它工作或理解我正在做的事情。

目前 - 当我尝试提交表单并对其进行验证时,我会在浏览器中获得以下内容:

/**/

我正在服用的东西已经坏了!

我在app/validators/customValidate.php

中创建了一个班级
class CustomValidate extends Illuminate\Validation\Validator
{

public function uniqueMailchimp($attribute, $value, $parameters)
{
    $mailchimp = MailchimpWrapper::lists()
    ->memberInfo(
    'xxxxxxx',
    array('emails'=>array(
        'email'=>$value
        )
    ));

    //dd($$mailchimp['success_count']);

    return ($mailchimp['success_count'] > 0 ? false : true );
}

我已经运行了composer dump-autload

在我的控制器中,我正在执行以下操作:

$rules = array(
            'email' =>'email|uniqueMailchimp',

        );

    $messages = array(
            'uniqueMailchimp'=>'The email provided has already been used.'
        );

    $validator = Validator::make($data, $rules, $messages);

}

然后我会检查一个有效的表格:

if($validator->passes()) {
    # code
} 

如果验证失败,控制器应重定向到视图:

return Redirect::route('members.create')
        ->withInput()
        ->withErrors($validator)
        ->with('errMessage', $message);

我可能错过了一步。我看过有关在global.php中注册规则的帖子,但我不确定我在做什么。

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

你是对的 - 你需要用验证器注册你的规则。在任何类似bootstrap的文件中(如果你有一个服务提供者是最好的候选者,否则app/start/global.php是好的,而routes.php也不会疯狂)你需要以下代码:

Validator::extend('foo', 'CustomValidate@uniqueMailchimp');

但是,如果你看一下the docs,你会发现你不需要整个课程 - 你可以把它作为一个闭包。如果您希望为您执行自动IoC DI,则类很有用(尽管您似乎没有在验证器中使用它)。