到目前为止,我一直在调用/检查parent::beforeDelete()
的结果我自己的代码:
public function beforeDelete()
{
if(parent::beforeValidate())
{
$this->short = strtolower(preg_replace("/[^a-zA-Z0-9_-]+/", "", (string)$this->short));
return TRUE;
}
return FALSE;
}
(从模型的某个属性中删除不正确的字符的示例)
但是现在,我找到了this answer:
public function beforeDelete()
{
foreach($this->qualifications as $q)
$q->delete();
return parent::beforeDelete();
}
(删除相关模型记录的示例)
我很困惑?我该什么时候打电话给parent::beforeDelete()
?总是在我的代码执行之前,总是在执行我的代码之后或者根据上下文/我正在做什么?
答案 0 :(得分:1)
某些方法附加了事件侦听器,在本例中为onBeforeDelete
事件。您必须调用父实现,以便正确引发事件。
总是在最后一个更安全,因为如果你在代码之前调用它,并且你的代码修改了会导致beforeDelete
中的代码失败的内容,那么现在就不会发生beforeDelete
被提前触发了。
在您的第一个示例中,您在beforeValidate
函数中调用了完全不同的 beforeDelete
。