在yii2中比较验证规则失败

jobtbby3  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(186)

我使用yii2,我有三个字段num1,num2,num3。我想添加验证,num2输入应该大于num1输入,所以我使用比较规则。代码如下

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

问题:如果我在输入中添加8,9,10,则可以工作,但如果我在输入中添加8,10,11,则会失败。我已尝试将输入类型添加为数字。

sdnqo3pr

sdnqo3pr1#

默认情况下,yii\validators\CompareValidator中的操作数作为字符串进行比较。这就是'10'被认为小于'8'的原因。
您需要设置CompareValidator::$type属性以将操作数作为数字进行比较。
规则应如下所示:

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

相关问题