Динамически добавить валидатор в модель

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
MetalGuardian
Сообщения: 208
Зарегистрирован: 2011.03.06, 02:42
Откуда: Киев

Динамически добавить валидатор в модель

Сообщение MetalGuardian »

как можно добавить валидатор в модель уже после ее создания?
сценарии не подходят, так как на этапе описания не известно что нужно валидировать
отдельные валидаторы ($validator = new ...; $validator->validateAttribute() ) не хочется использовать, потому что они не добавят клиентскую валидацию

есть у модели публичный параметр validators, но в документации он указан как read-only
http://www.yiiframework.com/doc-2.0/yii ... ors-detail
через него нормально все работает, но есть ли какие то последствия, от использования его так:
$model->validators[] = new Validator();
?
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Динамически добавить валидатор в модель

Сообщение lynicidn »

https://github.com/yiisoft/yii2/blob/ma ... l.php#L155
вам надо динамичесвую форму, а так да добавить нельзя, только из rules берется
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Динамически добавить валидатор в модель

Сообщение lynicidn »

наврал я, да вы правы вы получите массив объектов и можете их менять

Because this method returns an ArrayObject object, you may manipulate it by inserting or removing validators (useful in model behaviors). For example,

$model->validators[] = $newValidator;
aquy
Сообщения: 48
Зарегистрирован: 2014.08.21, 09:35

Re: Динамически добавить валидатор в модель

Сообщение aquy »

Только забыли пример добавить:

Код: Выделить всё

$newValidator = Validator::createValidator('required', $model, ['elem']);
$model->validators[] = $newValidator;
 
Не забывайте при создании валидатора создавать его сразу для нужной вам модели, а после этого надо ее добавить в массив $model->validators[]
Ответить