在Yii2中验证整数需在rules()中声明'integer'验证器,注意其默认integerOnly=>true;范围验证可用min/max参数或'number'+integerOnly;数组元素验证用each嵌套integer规则。

在Yii2中验证某个模型属性必须为整数,需在rules()方法中正确声明integer验证器,并注意其底层依赖NumberValidator且默认启用integerOnly => true,否则可能把3.0或"5"误判为合法整数。
基础整数验证
第一步:在模型类的rules()方法中添加规则数组,指定属性名和'integer'验证器别名。
第二步:确保该属性未被其他规则(如'string')覆盖或干扰,因为验证器执行顺序会影响最终结果。
第三步:调用$model->validate()触发校验,失败时$model->errors会包含对应字段错误信息。
带范围限制的整数验证
方法一:直接在规则中添加min和max参数,例如['age', 'integer', 'min' => 1, 'max' => 120]。这一步会同时校验是否为整数+是否在区间内,两个条件缺一不可。
方法二:使用number验证器配合integerOnly显式设为true,例如['score', 'number', 'integerOnly' => true, 'min' => 0]。这种方式更透明,但写法略长。
【注意:若只写'number'不加integerOnly=>true,则3.14也会通过验证】
验证数组中的每个元素都是整数
使用each验证器嵌套integer规则,适用于属性值为数组的场景,例如批量删除ID列表deleteIds。
在rules()中写:[['deleteIds'], 'each', 'rule' => ['integer']]。
这一步会遍历deleteIds数组每一项,单独调用integer验证器;只要其中任意一项不是整数,整个字段即验证失败。


















