我有几个事件处理程序(它们是CActiveRecordBehavior
个类)来回答onAfterSave
类的CActiveRecord
事件。
其中一个事件处理程序需要调用其他事件才能继续。
我怎么能强迫这个事件成为最后一次执行?
我的行为声明如下:
public function behaviors()
{
return array_merge(
array(
'firstBehavior' => array(
'class' => 'application.components.firstBehavior',
),
'secondBehavior' => array(
'class' => 'application.components.secondBehavior',
),
), parent::behaviors()
);
}
我知道当我打电话时
$model->getEventHandlers($eventName)->add($eventHandler);
该事件附加在列表的末尾并最后执行,但我现在不能放置此代码:
- 在附加行为之前调用activeRecord对象的init()
方法,这样即使我从此方法添加事件而不添加列表中的行为,添加的事件也不会是最后执行的事件。
答案 0 :(得分:0)
AS Jon sais在评论中实现它的最佳方法是不附加事件处理程序bu来覆盖现有方法:
public function save($runValidation=true,$attributes=null)
{
if(parent::save($runValidation, $attributes)) {
//Handle my event since the other events have been executed
// in the parent::save method
return true;
} else {
return false;
}
}