在这种情况下,我的表单如下:
public $selling_price;
public $numbers;
public $inventory_factor;
public function rules() {
return [
['selling_price'], 'integer'],
[['inventory_factor'], 'safe'],
['numbers', 'each', 'rule' => ['integer']],
}
我有这最后一条验证规则,以确保得到整数数组。例如,当输入是字符串时,这可以正常工作。如果发送数组[null],则IT无法正常工作。例如,这不会引发错误
{
"selling_price": 2200,
"numbers": [null]
}
使用vardumper,将数字数组设为
[
0 => null
]
Yii2中是否可以通过这种方式在启动之前从数组中删除(过滤)空值,或者也可以对它们进行验证?
答案 0 :(得分:1)
['数字','整数','最小'=> 0]
这将验证该值是否为大于0的整数(如果不为空)。普通验证器将$ skipOnEmpty设置为true。
参考:https://www.yiiframework.com/doc/guide/2.0/en/input-validation
在此数据过滤主题中,您可以参考这些
答案 1 :(得分:1)
查看了核心验证程序的特殊主题之后,我发现在each验证程序下它显示:
rule:指定验证规则的数组。数组中的第一个元素指定类名或验证程序的别名。数组中的其余“名称/值”对用于配置验证器对象。
另外,对于扩展yii\validators\Validator的yii \ validators \ EachValidator,它具有属性$skipOnEmpty
,其属性默认为true
:
$ skipOnEmpty公共属性 -如果属性值为null或空字符串,是否应跳过此验证规则。
布尔布尔值$ skipOnEmpty = true
因此,因此,您需要按照以下方式调整规则。
['numbers', 'each', 'rule' => ['integer', 'skipOnEmpty' => false]],
现在,您用于numbers
的验证器将不会对数组中的空值视而不见-如果发现任何空值或非整数值,验证将失败。