我很担心自定义验证规则是否需要返回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处理。
目前,我认为我允许通过任何事情。我是否正确使用自定义规则,如果我想抛出错误应该返回什么?
答案 0 :(得分:0)
我认为你正以错误的方式接近这一点。除了为单个用例扩展Validator类的压力之外,您应该考虑简单地将消息添加到消息包中,并将input元素作为键。 e.g。
$validator->messages()->add('client_id', 'This email is already associated with a client');
提示:我通常会在模型中添加一个规则数组并注入一个
Validator
类,这样我就可以轻松验证模型,而无需创建Validator
的实例或编写规则数组。时间。