简体   繁体   English

比较验证规则在 yii2 中失败

[英]compare validation rule fails in yii2

I am using yii2, I have three fields num1,num2,num3.我正在使用 yii2,我有三个字段 num1、num2、num3。 I want to add validation, num2 input should be greater than num1 input, so I am using compare rule.我想添加验证,num2 输入应该大于 num1 输入,所以我使用比较规则。 Here is the code这是代码

        return [
            [['num1', 'num2', 'num3'], 'required'],
            [['num1', 'num2', 'num3'], 'integer', 'min' => self::MIN_SIZE, 'max' => self::MAX_SIZE],  
            ['num2', 'compare', 'compareAttribute' => 'num1', 'operator' => '>'],
        ];
    }

Issue: It works if I add 8,9,10 in the inputs but fails If I add 8,10,11 in the inputs.问题:如果我在输入中添加 8、9、10,它会工作,但如果我在输入中添加 8、10、11,它就会失败。 I have tried adding input type as number.我尝试将输入类型添加为数字。 在此处输入图像描述

The operands are compared as strings by default in yii\validators\CompareValidator .yii\validators\CompareValidator中默认将操作数作为字符串进行比较。 That's why '10' is considered less than '8' .这就是为什么'10'被认为小于'8'原因。

You need to set CompareValidator::$type property to compare operands as numbers.您需要设置CompareValidator::$type属性以将操作数作为数字进行比较。

Your rule should look like this:您的规则应如下所示:

[
    'num2',
    'compare',
    'compareAttribute' => 'num1',
    'operator' => '>',
    'type' => \yii\validators\CompareValidator::TYPE_NUMBER
]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM