onAfterValidate() и события
onAfterValidate() и события
Нигде не могу найти более менее подробного объяснения событиям в Yii.
Вот мне, например, нужно после валидации объекта CFormModel неким образом переработать его поля и сохранить в виде нового свойства этого объекта. Как это правильно сделать при помощи onAfterValidate()?
Будет здорово, если на основе данного примера уважаемый Александр расширит соответствующую статью в рецептах: http://yiiframework.ru/doc/cookbook/ru/core.events
Вот мне, например, нужно после валидации объекта CFormModel неким образом переработать его поля и сохранить в виде нового свойства этого объекта. Как это правильно сделать при помощи onAfterValidate()?
Будет здорово, если на основе данного примера уважаемый Александр расширит соответствующую статью в рецептах: http://yiiframework.ru/doc/cookbook/ru/core.events
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: onAfterValidate() и события
Код: Выделить всё
function onAfterValidate($event){
// модель свалидирована и наполнена
// хешируем пароль
$this->password = sha1($this->password.'salt');
return parent::onAfterValidate($event);
}
Нравится Yii? Давайте сделаем его лучше!.
Re: onAfterValidate() и события
Извиняюсь за тупость, но можно как-то пояснить, что тут происходит?
Откуда берется $event и как он потом используется? Или это как бы замкнутая конструкция и никакого внешнего обслуживания не требуется?
Каково назначение вызова parent::onAfterValidate($event)?
По ссылке в рецептах тоже, кстати, не понятно, как все происходит:
Сначала мы определяем метод public function onNewComment($event), а потом в примере использования делаем присваивание свойству:
$blogModel->onNewComment = array($notifier, 'comment');
Как так?
И обработчик события живет в одном файле с моделью, где он используется? Судя по примеру, это так, но если где-то еще понадобится такой же обработчик -- он сработает?
Скорее всего я не понимаю базовый принцип событий... где можно прочитать об этом?
Откуда берется $event и как он потом используется? Или это как бы замкнутая конструкция и никакого внешнего обслуживания не требуется?
Каково назначение вызова parent::onAfterValidate($event)?
По ссылке в рецептах тоже, кстати, не понятно, как все происходит:
Сначала мы определяем метод public function onNewComment($event), а потом в примере использования делаем присваивание свойству:
$blogModel->onNewComment = array($notifier, 'comment');
Как так?
И обработчик события живет в одном файле с моделью, где он используется? Судя по примеру, это так, но если где-то еще понадобится такой же обработчик -- он сработает?
Скорее всего я не понимаю базовый принцип событий... где можно прочитать об этом?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: onAfterValidate() и события
$event передаётся родительским классом CModel. Никакого внешнего обслуживания не требуется.
нужен, чтобы отработали все остальные события, навешанные в поведениях.
Тут у нас назначение callback-метода. Т.е. при вызове onNewComment() в том числе отработает и $notifier->comment(). Используется в основном в поведениях и в своих моделях. Посмотрите исходник CModel, станет понятно, что эти методы вызывает.
Код: Выделить всё
parent::onAfterValidate($event)
Код: Выделить всё
$blogModel->onNewComment = array($notifier, 'comment');
Если его назначить, то сработает.если где-то еще понадобится такой же обработчик -- он сработает
Нравится Yii? Давайте сделаем его лучше!.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: onAfterValidate() и события
Вообще смысл событий: объявляется некое событие и его обработчик по умолчанию. На событие могут подписаться какие-то сторонние методы. При вызове события (Обычно это делает какой-то компонент. В Yii это чаще всего модель) последовательно вызываются все подписанные методы-обработчики.
Нравится Yii? Давайте сделаем его лучше!.
Re: onAfterValidate() и события
Большое спасибо за консультацию и отдельное спасибо за документацию и примеры! Это великая работа!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: onAfterValidate() и события
Стоит ли переместить ответы в рецепт?
Нравится Yii? Давайте сделаем его лучше!.
Re: onAfterValidate() и события
Точно не повредит. А вообще, конечно, тему поведений и событий было бы правильнее раскрывать в виде отдельных подробных статей, уж очень она неочевидно раскрыта в основной документации и в api. Я бы и сам поучаствовал, не будь чайником -- ну может позже, когда разовьюсь
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: onAfterValidate() и события
я давно уже жду когда появится пример по интереснее с событиями, чтоб понять что это такое, и для чего нужно.
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: onAfterValidate() и события
Переписал рецепт. Теперь описание максимально подробное и с примерами: http://yiiframework.ru/doc/cookbook/ru/core.events
Нравится Yii? Давайте сделаем его лучше!.
Re: onAfterValidate() и события
Супер! Спасибо огромное!