簡體   English   中英

Yii2:數組的驗證規則?

[英]Yii2: validation rule for array?

我可以為這樣的單個整數定義規則:

[['x'], 'integer']

有可能告訴x是整數數組嗎? 例如:

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

我可以在數組中指定有效值嗎?

更新 :從Yii版本2.0.4我們得到了一些幫助。 看到這個答案

從版本2.0.4開始,新的EveryValidator使它現在更容易:

['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()設置,則使用'strict' => true可能沒有意義。 我不太確定,但我認為這些值都是以字符串形式發送的(比如“5”而不是5)。

您可能需要創建如下的自定義驗證規則:

['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!');
     }
}]

如果需要檢查每個數組元素的特定范圍

['x', 'required'] 

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

要么

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM