Yii2:数组的验证规则?

2022-08-30 17:21:07

我可以为单个整数定义一个规则,如下所示:

[['x'], 'integer']

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

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

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

更新:从 Yii 版本 2.0.4 开始,我们得到了一些帮助。看到这个答案


答案 1

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

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

这应该足够了。如果还应该检查这些值,则可以使用这个(与“in”验证器一起使用,它实际上是RangeValidator):

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

但是,您也可以直接使用此“in”验证器。这在 2.0.4 之前的 Yii 版本中是可能的:

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

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


答案 2

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

['x','checkIsArray']

然后在你的模型中,impelement: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!');
     }
}]

推荐