具有其他条件 (Laravel 5.4) 的验证规则 required_if

Validation rules required_if with other condition (Laravel 5.4)

我遇到了嵌套条件验证规则的问题。

class StoreRequest extends Request
{
        public function authorize(){
        return true;
        }

        public function rules(){
                return [
                    'type_id'     => 'required|integer',
                    'external_id' => 'required_if:type_id,==,3|integer',
                ];
        }
}

我确实想: - 仅当 type_id 等于 3 时检查 external_id - 并检查它是否为整数。

当我 post 我的表格时,规则在我 select a type_id 等于 3 时起作用。 但是如果我 select 另一个 type_id,比如 1 或 2,验证不会通过:

The external_id must be an integer.

我尝试添加可为 null 的条件,但 required_if 不再起作用

你有什么想法吗?

您的规则执行两项相互独立的检查;只是因为 external_id 字段在 type_id != 3 时不需要,并不意味着忽略整数检查。

您正在寻找的是 conditional rule,它可以让您更好地控制何时执行检查,例如:

$validator = Validator::make($data, [
    'type_id'   => 'required|integer'
]);

$validator->sometimes('external_id', 'required|integer', function($input) {
    return $input->type_id == 3;
});

使用表单验证时,您可以通过覆盖 getValidatorInstance() 方法来访问底层验证器实例:

class StoreRequest extends Request
{
        public function authorize(){
        return true;
        }

        public function rules(){
                return [
                    'type_id'     => 'required|integer'
                ];
        }

        protected function getValidatorInstance() {
            $validator = parent::getValidatorInstance();
            $validator->sometimes('external_id', 'required|integer', function($input) {
                return $input->type_id == 3;
            });
            return $validator;
        }
}

试试这个,

  class StoreRequest extends Request
    {
            public function authorize(){
            return true;
            }

            public function rules(){
                    return [
                        'type_id'     => 'required|integer',
                        'external_id' => 'required_if:type_id|in:3|integer',
                    ];
            }
    }

刚遇到同样的问题,发现以下答案似乎对我有用:

issue-using-required-if-validation-rule-in-form-builder

     return [
                'type_id'     => 'required|integer',
                'external_id' => 'required_if:type_id,==,3|nullable|integer',
            ];

我的结果:

字段未填充,类型 id 不是 3 - 通过

字段未填充,类型 id 3 - 失败 - 必填字段

已填充字段,类型 id 3,非整数 - 不符合整数规则

填充字段,类型 id 3,整数 - 通过 - 一切正常!

注意 - 认为可以为空的规则出现了 Laravel 5.3

试试这个 直接传值 参考:https://www.npmjs.com/package/validatorjs

"required_if:另一个字段,值"=19=]

如果另一个字段字段等于任何值,则验证字段必须存在且不能为空。

'type_id'     => 'required|integer',
'external_id' => 'required_if:type_i,3|integer',