Laravel 4自定义验证规则

时间:2016-07-19 16:51:48

标签: php validation laravel laravel-4

我很担心自定义验证规则是否需要返回true或false才能触发。

我正在验证一个电子邮件地址,使其通过关系已经属于另一个模型。

Validator::extend('email_exists', function($attribute, $value, $parameter){
        $user = User::where('email', '=', $value)->with('clients')->first();
        //Does the user exits, and are they already a member of this client?
        //We know this by looking at the client id, and comparing them the current ID.
        if($user != NULL) {
            if(in_array(Input::get('client_id'), $user->clients->lists('id'))) {
                return false;
            } else {
                return true;
            }
        } else {
            return true;
        }

});

我在上面尝试的是,查找用户是否存在输入的电子邮件,如果确实存在,则检查电子邮件是否与任何客户端相关,以及这些客户端ID是否与客户端ID匹配POST,如果电子邮件存在且与POST中的客户端ID相关,我想返回错误,另外我很高兴POST处理。

目前,我认为我允许通过任何事情。我是否正确使用自定义规则,如果我想抛出错误应该返回什么?

1 个答案:

答案 0 :(得分:0)

我认为你正以错误的方式接近这一点。除了为单个用例扩展Validator类的压力之外,您应该考虑简单地将消息添加到消息包中,并将input元素作为键。 e.g。

$validator->messages()->add('client_id', 'This email is already associated with a client');
  

提示:我通常会在模型中添加一个规则数组并注入一个Validator类,这样我就可以轻松验证模型,而无需创建Validator的实例或编写规则数组。时间。