В процессе разработки часто в качестве атрибута может выступать массив с данными, которые также нужно валидировать. В Yii2 есть необходимый валидатор, о котором мы часто забываем. В этой статье — пример работы с валидатором each для валидации элементов массива.
Собственно все достаточно просто. И отлично описано в документации.
Другими словами — при помощи EachValidator мы можем применить любой валидатор (включая самописные) к каждому из элементов массива.
Ниже пример:
class SomeModel extends yii\base\Model{
// Каждый элемент должен быть числом. Валидация будет успешна.
public $arrayOfInt = [1, 2, 3, 4] ;
// Каждый элемент должен быть в списке ['yes', 'no']. Валидация будет успешна.
public $arrayOfYesNo = ['yes', 'no'] ;
// Каждый элемент должен быть в списке ['yes', 'no']. Валидация вернет ошибку. Элемент 'some-error-value' не попадает в список разрешенных.
public $array2OfYesNo = ['yes', 'no', 'some-error-value'] ;
public function rules(){
return [
[['arrayOfInt'], 'each', 'rule' => ['integer']],
[['arrayOfYesNo'], 'each', 'rule' => ['in', 'range' => ['yes', 'no']]],
[['array2OfYesNo'], 'each', 'rule' => ['in', 'range' => ['yes', 'no']]]
];
}
}
Вот и весь пример. Надеюсь мне удалось сделать его максимально понятным и продемонстировать работу валидатора Each.
Если остались вопросы — буду рад Вашим комментариям. Удачи!