我正在基于required_if创建一个新的必需验证,该工作正常。但我需要使用这个新的必需验证和可空的验证,其中我的新验证不起作用。这是我在控制器中使用的代码:
'number' => 'nullable|required_when_has_restriction:role,restriction_must_have_number|digits:11',
这是新的验证器:
class ValidatorServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('required_when_has_restriction', function ($attribute, $value, $parameters, $validator) {
$other = Arr::get($validator->getData(), $parameters[0]);
$role = Role::where('name', $other)->first();
if($role->permissions()->where('name', $parameters[1])->exists()){
return $validator->validateRequired($attribute, $value);
}
return true;
});
}
public function register()
{
//
}
}
我希望当字段为null时,此验证器仍然有效,因为我需要对数字进行可空的验证。有人可以解释如何解决这个问题吗?
答案 0 :(得分:1)
存在时验证
在某些情况下,您可能希望对a执行验证检查 仅当输入数组中存在该字段时才输入字段。快点 完成此操作后,将
sometimes
规则添加到规则列表中:
'number' => 'sometimes|required_when_has_restriction:role,restriction_must_have_number|digits:11'
尝试将nullable
添加到属性中。
Validator::extend('required_when_has_restriction', function ($attribute, $value, $parameters, $validator) {
$other = Arr::get($validator->getData(), $parameters[0]);
$role = Role::where('name', $other)->first();
if($role->permissions()->where('name', $parameters[1])->exists()){
return $validator->validateRequired($attribute, $value);
}
$attribute[]='nullable';
return true;
});
答案 1 :(得分:1)
发现我必须将extend更改为extendImplicit,以便在存在可空条件时将其更改为