Yii2:数组的验证规则?

时间:2014-12-02 15:25:07

标签: php validation yii2

我可以为这样的单个整数定义规则:

[['x'], 'integer']

是否可以判断x是整数数组?例如:

[['x'], 'integer[]']

我可以在数组中指定有效值吗?

更新:从Yii版本2.0.4开始,我们得到了一些帮助。请参阅this answer

3 个答案:

答案 0 :(得分:50)

从版本2.0.4开始,新的EachValidator使现在变得更加容易:

['x', 'each', 'rule' => ['integer']],

这应该足够了。如果还要检查这些值,你可以使用它('in' validator实际上是RangeValidator):

['x', 'each', 'rule' => ['in', 'range' => [2, 4, 6, 8]]], // each value in x can only be 2, 4, 6 or 8

但是,你可以在'中使用这个'验证员也直接。对于2.0.4之前的Yii版本,这是可能的:

['x', 'in', 'range' => [2, 4, 6, 8], 'allowArray' => true]

如果客户端发送数据并使用Model->load()设置,则'strict' => true的使用可能没有意义。我不太确定,但我认为这些值都是以字符串形式发送的(例如" 5"而不是5)。

答案 1 :(得分:15)

您可能需要创建如下所示的自定义验证规则:

['x','checkIsArray']

然后在你的模型中,阻碍checkIsArray

public function checkIsArray(){
     if(!is_array($this->x)){
         $this->addError('x','X is not array!');
     }
}

您可以在自定义验证规则中执行所有操作。


在评论中提到的 emte ,你也可以使用内联验证器和匿名函数,如下所示:

['x',function ($attribute, $params) {
    if(!is_array($this->x)){
         $this->addError('x','X is not array!');
     }
}]

答案 2 :(得分:3)

如果需要检查每个数组元素的特定范围

['x', 'required'] 

['x', 'each', 'rule' => ['in',  'allowArray' => true, 'range' => [2, 4, 6, 8]]]

['x', 'in', 'allowArray' => true,  'range' => [2, 4, 6, 8] ]