Yii2: regola di validazione per arrays?

Posso definire una regola per un singolo integer come questo:

[['x'], 'integer'] 

È ansible dire che x è un arrays integer? Per esempio:

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

E potrei specificare i valori validi nell'arrays?

Aggiornamento : dalla versione 2.0.4 di Yii abbiamo un aiuto. Vedi questa risposta

Dalla versione 2.0.4 c'è il nuovo EachValidator che rende più facile ora:

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

Questo dovrebbe essere sufficiente. Se i valori devono essere controllati, puoi usare questo (con il validatore 'in' che in realtà è il RangeValidator):

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

Tuttavia, puoi anche usare direttamente questo validatore "in". E questo è ansible con le versioni di Yii precedenti alla 2.0.4:

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

L'uso di 'strict' => true probabilmente non ha senso nel caso in cui i dati siano inviati dal client e impostati con Model-> load () . Non ne sono sicuro, ma penso che questi valori siano tutti inviati come stringhe (come "5" anziché 5).

Potrebbe essere necessario creare regole di validation personalizzate come di seguito:

 ['x','checkIsArray'] 

Quindi nel tuo model, check checkIsArray arrays di checkIsArray :

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

Puoi fare tutto il necessario in una regola di validation personalizzata.


Come emte menzionato nel commento, puoi anche usare validatore in linea con function anonima come di seguito:

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

Se è necessario verificare l'intervallo specifico per ciascun elemento dell'arrays

 ['x', 'required'] 

più

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

o

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