Php Yii2验证空数组(空数组)

Php Yii2验证空数组(空数组),php,validation,yii,yii2,Php,Validation,Yii,Yii2,我有一个场景,其中我有一个表单,如下所示: public $selling_price; public $numbers; public $inventory_factor; public function rules() { return [ ['selling_price'], 'integer'], [['inventory_factor'], 'safe'], ['numbers', 'each', 'rule' => ['

我有一个场景,其中我有一个表单,如下所示:

public $selling_price;
public $numbers;
public $inventory_factor;

public function rules() {
    return [
        ['selling_price'], 'integer'],
        [['inventory_factor'], 'safe'],
        ['numbers', 'each', 'rule' => ['integer']],
}
我有最后一条验证规则来确保我得到一个整数数组。例如,当输入是一个字符串时,这可以很好地工作。但是,如果发送了数组[null],它将不起作用。例如,此示例不会抛出错误

{
  "selling_price": 2200,
  "numbers": [null]
}
使用vardumper,给出要使用的数字数组

[
    0 => null
] 

Yii2中有没有一种方法可以在启动之前从数组中删除(过滤)空值,或者也可以验证这些空值?

['numbers','integer','min'=>0]

这将验证该值是否为大于0的整数(如果该值不为空)。普通验证器将$skipOnEmpty设置为true

参考:


在这个数据过滤主题中,您可以参考这些

在查看了核心验证器的特殊主题后,我发现在验证器下面显示:

规则:指定验证规则的数组。数组中的第一个元素指定验证程序的类名或别名。数组中其余的名称-值对用于配置验证器对象

此外,对于扩展它的yii\validators\EachValidator,它有一个属性
$skipOnEmpty
,默认为
true

$skipOnEmpty公共属性 -如果属性值为null或空字符串,是否应跳过此验证规则

公共布尔值$skipOnEmpty=true

因此,相应地,您需要调整规则如下

['numbers', 'each', 'rule' => ['integer', 'skipOnEmpty' => false]],

现在,
数字的验证器将不会对数组中的空值视而不见-如果它发现任何空值或非整数值,验证将失败。

显示触发验证的代码。是否确实正在执行验证?奇怪的是,您在这里将数据打印为带有尾随逗号的非法JSON字符串,我确信验证已完全运行。我刚刚从json中删除了不必要的部分。但是我会更新这个,谢谢你的评论:)非常感谢,这正是我想要的,很高兴能帮上忙!Yii2的文档非常棒,有时确实需要一点毅力和挖掘才能得到你想要的东西,但99%的时间都在那里:)