为了重用代码,我在名为的文件中创建了自己的验证器规则验证服务提供者 :
class ValidatorServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('checkEmailPresenceAndValidity', function ($attribute, $value, $parameters, $validator) {
$user = User::where('email', $value)->first();
// Email has not been found
if (! $user) {
return false;
}
// Email has not been validated
if (! $user->valid_email) {
return false;
}
return true;
});
}
public function register()
{
//
}
}
我这样使用这个规则:
public function rules()
{
return [
'email' => 'bail|required|checkEmailPresenceAndValidity'
];
}
但是,我想为每种情况设置不同的错误消息,如下所示:
if (! $user) {
$WHATEVER_INST->error_message = 'email not found';
return false;
}
if (! $user->valid_email) {
$WHATEVER_INST->error_message = 'invalid email';
return false;
}
但我不知道如何在不执行两条不同规则的情况下实现这一目标......
当然,它可以使用多个规则,但它也会执行多个 SQL 查询,我真的想避免这种情况。
另外,请记住,在实际情况下,我可以在一条规则中进行超过 2 个这样的验证。
有人有主意吗?
=====
编辑1:
实际上,我认为我想要一些与between
or size
rules.
它们代表一条规则,但提供多条错误消息:
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
Laravel 检查该值是否表示数字、文件、字符串或数组;并获取正确的错误消息以供使用。
我们如何通过自定义规则来实现这种事情?