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] ]