我应该在什么时候调用Yii模型中的parent::beforeDelete()

我应该在什么时候调用Yii模型中的parent::beforeDelete(),yii,model,yii-events,Yii,Model,Yii Events,到目前为止,我一直在调用/检查parent::beforeDelete()的结果,然后才调用自己的代码: public function beforeDelete() { if(parent::beforeValidate()) { $this->short = strtolower(preg_replace("/[^a-zA-Z0-9_-]+/", "", (string)$this->short)); return TRUE;

到目前为止,我一直在调用/检查
parent::beforeDelete()
的结果,然后才调用自己的代码:

public function beforeDelete()
{
    if(parent::beforeValidate())
    {
        $this->short = strtolower(preg_replace("/[^a-zA-Z0-9_-]+/", "", (string)$this->short));

        return TRUE;
    }

    return FALSE;
}
(从模型的一个属性中删除不正确字符的示例)

但现在,我发现:

(删除具有相关模型的记录的示例)


我很困惑?我应该什么时候调用
parent::beforeDelete()
?总是在执行代码之前,总是在执行代码之后,或者取决于上下文/我在做什么?

有些方法附加了事件侦听器,在本例中是
onBeforeDelete
事件。您必须调用父实现,以便正确引发事件

“始终在最后”更安全,因为如果您在代码之前调用它,并且您的代码修改了一些可能会导致
beforeDelete
中的代码失败的内容,那么现在就不会发生这种情况,因为
beforeDelete
已提前触发


在第一个示例中,您在
beforeDelete
函数中调用的
beforevaluate是完全不同的

我接受你的回答,虽然在我看来,还不够充分。虽然我同意你的观点,但你似乎忘记了一些情况,在这些情况下,在你的代码之后必须在删除之前调用
。例如,当您在运行时,您必须在代码之后调用
parent::beforeDelete()
,并且只有在事务成功且无错误时才能调用。您没有其他方法来通知Yii,删除关系记录是可以的,Yii可以继续删除主记录。同意,在某些情况下,您以前不应该打电话,我只是想说明,以前打电话从来都不是一个好主意,因此请务必稍后再打电话。
public function beforeDelete()
{
    foreach($this->qualifications as $q)
        $q->delete();
    return parent::beforeDelete();
}