【问题标题】:Validation rules required_if with other condition (Laravel 5.4)验证规则 required_if 与其他条件(Laravel 5.4)
【发布时间】:2017-07-08 07:11:37
【问题描述】:

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

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 不再起作用

你有什么想法吗?

【问题讨论】:

    标签: php laravel validation laravel-5.4 validationrules


    【解决方案1】:

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

    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

    【讨论】:

    • 您提供的链接已损坏。
    • 像魅力一样工作!
    • @Nick A 我知道如果操作是=,它可以工作,但我尝试使用> 运算符,它总是说:required if value is 2。我试过了:required_if:value, >, 2请帮忙!
    【解决方案2】:

    您的规则执行两项相互独立的检查;仅仅因为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;
            }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,

        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',
                          ];
                  }
          }
      

      【讨论】:

        【解决方案4】:

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

        "required_if:anotherfield,value"

        如果 anotherfield 字段等于任何值,则验证中的字段必须存在且不为空。

        'type_id' => '必需|整数', 'external_id' => 'required_if:type_i,3|integer',

        【讨论】:

          猜你喜欢
          • 2020-05-25
          • 2019-03-21
          • 2018-01-12
          • 1970-01-01
          • 2017-06-13
          • 2021-07-22
          • 2016-10-13
          • 1970-01-01
          • 2014-04-15
          相关资源
          最近更新 更多