2015-09-27 38 views
1

當您使用Yii2的驗證規則的模型內,例如:在Yii2驗證規則中傳遞多維數組?

[['foo','bar'], 'integer], 

顯然['foo','bar']是一個數組,我知道你可以使用。

但可以做到通過一個多維數組是這樣的:

$this->numbers = [1,2,3]; 

[['foo','bar','numbers'], 'integer] 

威爾Yii2接受這一點,並檢查正確的數據還是會測試值,因爲numbers是一個數組返回一個錯誤?

+0

也許[這](http://stackoverflow.com/a/30300977/57091)會幫助你,如果你想創建具有一定的允許值驗證。你的意思是foo和bar可能只有價值1,2或3? – robsch

+0

或者數字應該是整數數組?是的,如果這些屬性是「正常」整數,需要與foo和bar分開定義。 – robsch

+0

@robsch是的,第二個。我已經將他們轉移到使用'each'驗證器。 – Brett

回答

2

你需要合併陣列工作規則

[ArrayHelper::merge(['foo','bar'], $this->getNumberFields()), 'integer'] 

更新:

使用each規則。見EachValidator

public function rules() 
{ 
    return [ 
     ['numbers', 'each', 'rule' => ['integer']], 
    ] 
} 
+0

什麼是$ this-> getNumberFields()'? – Brett

+0

函數在您的模型中返回字段名稱數組,如'['dynamicIntegerFieldOne','integerFieldTwo']'。 –

+0

但我只想通過它的屬性名稱就像我用'foo'&'bar'做的那樣。我想我只是檢查它是否可以在一條規則內完成,如果沒有,我會在第二條規則中使用'each'驗證器。 :) – Brett