Валидация в поведении?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
feodor
Сообщения: 95
Зарегистрирован: 2013.01.28, 00:02

Валидация в поведении?

Сообщение feodor »

День добрый. В поведении CModelBehavior можно добавлять новые переменные - члены класса для модели.
А можно ли как-то внутри поведения сделать и валидацию?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Валидация в поведении?

Сообщение SiZE »

Да возможно. Например, так:

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

public function beforeValidate( $event ){
        $validator = CValidator::createValidator( $this->validatorName, $this->owner, $this->attribute, $this->validatorParams );
        $this->owner->validatorList->add( $validator );
}
 
feodor
Сообщения: 95
Зарегистрирован: 2013.01.28, 00:02

Re: Валидация в поведении?

Сообщение feodor »

SiZE писал(а):Да возможно.
О! Шикарно, спасибо!

PS. Пока добавлял валидаторы столкнулся вот с чем. У меня было присвоение атрибутов в контроллере

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

$model->attributes = $_POST['MyModel'];
if($model->validate()) { ... } 
Если я добавлял валидоторы в поведении через beforeValidate() - атрибуты не присваивались. Происходило это потому, что статус safe присваивался атрибутам внутри validate(), т.к. из нее вызывается beforeValidate().

В итоге добавил валидаторы в afterConstruct() поведения - стало норм.
feodor
Сообщения: 95
Зарегистрирован: 2013.01.28, 00:02

Re: Валидация в поведении?

Сообщение feodor »

Тогда еще один вопрос возникает, можно ли из поведения добавить label для аттрибута?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Валидация в поведении?

Сообщение SiZE »

feodor писал(а):Тогда еще один вопрос возникает, можно ли из поведения добавить label для аттрибута?
Да чо угодно можно. $this->owner объект к которому подключено поведение
feodor
Сообщения: 95
Зарегистрирован: 2013.01.28, 00:02

Re: Валидация в поведении?

Сообщение feodor »

Спасибо
Ответить