Laravel验证required_if不起作用

时间:2019-11-08 03:51:13

标签: validation laravel-5

我有电子邮件和密码字段,仅在add_user字段值为1时才需要。这是我的验证:

public function rules() {
    return [
        'add_user' => ['required'],
        'password' => ['required_if:add_user,1', 'min:8'],
        'email' => ['required_if:add_user,1', 'email', 'max:255'],
    ];
}

这是行不通的,即使值是0,它也总是出错。我使用jquery填写了add_user值。我有一个下拉菜单,如果用户从选项中单击,add_user的值为0,但是如果通过输入,则值为1。值是正确的,但验证无效。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

我们正在检查两个互不依赖的字段,这意味着如果user_id!=1还会对密码和电子邮件进行其他验证,因此我们需要通过这种方式进行检查

     $rules = [
           'type' => 'required'
         ];

     $v = Validator::make(Input::all(),$rules);

     $v->sometimes('password', 'required|min:8', function($input) {
          return $input->type == '1';
     });

在这里我们创建一个Validator的实例,如果user_id ==1则需要检查密码,否则我们不需要验证它。

在模型中,您可以执行此操作。

 public function rules(){
    return [
      'user_id '     => 'required'
    ];
 }

 protected function getValidatorInstance() {
        $validator = parent::getValidatorInstance();
        $validator->sometimes('password', 'required|min:8', 
            function($input) {
            return $input->user_id== 1;
        });
        return $validator;
    }

答案 1 :(得分:0)

好的。知道了。

我添加了一个可为空的验证属性,现在它可以工作了。

return [
    'add_user' => ['required'],
    'password' => ['required_if:add_user,1', 'min:8', 'nullable'],
    'email' => ['required_if:add_user,1', 'email', 'max:255', 'nullable'],
];

希望有一天能对某人有所帮助。