验证规则 required_if 与其他条件 (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 - 并检查它是否为整数。

当我发布我的表单时,当我选择一个等于 3 的 type_id 时规则起作用。但是如果我选择另一个 type_id,比如 1 或 2,验证不会通过:

external_id 必须是整数。

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

你有什么想法吗?

原文由 kesm0 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 491
2 个回答

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

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

 $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;
        }
}

原文由 Graham 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

问题使用要求-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,整数 - 通过 - 一切都很好!

注意 - 认为 nullable 规则来自 Laravel 5.3

原文由 Nick A 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏