Yii2验证一个空数组(空数组)

时间:2018-06-26 11:08:12

标签: 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' => ['integer']],
}

我有这最后一条验证规则,以确保得到整数数组。例如,当输入是字符串时,这可以正常工作。如果发送数组[null],则IT无法正常工作。例如,这不会引发错误

{
  "selling_price": 2200,
  "numbers": [null]
}

使用vardumper,将数字数组设为

[
    0 => null
] 

Yii2中是否可以通过这种方式在启动之前从数组中删除(过滤)空值,或者也可以对它们进行验证?

2 个答案:

答案 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的验证器将不会对数组中的空值视而不见-如果发现任何空值或非整数值,验证将失败。