Laravel创建新的必需验证时出现问题

时间:2018-01-11 11:15:05

标签: laravel

我正在基于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时,此验证器仍然有效,因为我需要对数字进行可空的验证。有人可以解释如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

使用sometimes

存在时验证

  

在某些情况下,您可能希望对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;
    });

或制作custom validator,关注this链接或this链接。

答案 1 :(得分:1)

发现我必须将extend更改为extendImplicit,以便在存在可空条件时将其更改为