MyTetra Share
Делитесь знаниями!
Время создания: 13.07.2018 15:30
Автор: http://stackoverflow.com/users/57091/robsch
Текстовые метки: php yii2 array validate
Раздел: PHP - Yii2
Запись: Velonski/mytetra-database/master/base/1482133431gopjp33m8f/text.html на raw.githubusercontent.com

From version 2.0.4 there is the new EachValidator which makes it more easy now:


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


This should be sufficient. If the values should be also checked you could use this (with the 'in' validator which actually is the RangeValidator):


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


However, you can use this 'in' validator also directly. And that is possible with Yii versions before 2.0.4:


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


The use of 'strict' => true would probably makes no sense in case the data is sent by the client and is set with Model->load(). I'm not quite sure but I think those values are all sent as strings (like "5" instead of 5).


ADDON:


You may need to create custom validation rules like below:


['x','checkIsArray']


Then in your model, impelement checkIsArray:


public function checkIsArray(){

if(!is_array($this->x)){

$this->addError('x','X is not array!');

}

}


You can do all you need into a custom validation rule.


As emte mentioned on comment, you can also use inline validator with anonymous function like below:


['x',function ($attribute, $params) {

if(!is_array($this->x)){

$this->addError('x','X is not array!');

}

}]

 
MyTetra Share v.0.59
Яндекс индекс цитирования