Я написал behavior, который расширяет CActiveRecordbehavior,
Она переопределяет событие beforeSave
public function beforeSave($event)
{
if ($this->owner->isNewRecord) {
$newMeta = new MetaData();
$newMeta->save();
$this->owner->meta_id = $newMeta->id;
}
//parent::beforeSave($event);
//$this->owner->beforeSave();
}
В то же время в active record кому это поведение назначается, вызывает свои действия в своём beforeSave методе.
Это вообще можно? Чтобы и behavior сработал, и потом изначальный свой метод вызвался.
Не вводите пользователей в заблуждение, это элементарное действие в данном инструменте. Вы не до конца понимаете концепцию поведений. Дело в том, что на модель может быть навешано хоть 10 поведений. Более того у всех 10 вызовется beforeSave(), после чего вызовется beforeSave() модели, если все правильно делать. Так что этот workflow:
забудьте как страшный сон.
to Karasko
Это элементарно, просто не забывайте из перекрытого в модели(не поведении!) beforeSave() вызывать родительский метод beforeSave() таким образом:
protected beforeSave()
{
... все что угодно ...
return parent::beforeSave();
}
либо
protected beforeSave()
{
$result=parent::beforeSave();
... все что угодно, в том числе модификация $result ...
return $result;
}
В зависимости от того, какой workflow вам необходим, подойдет первый или второй вариант.
А вообще, чтобы подобных вопросов не возникало, неплохо читать комментарии к методам, которые перекрываете. Дословно: