到目前为止,在我自己编写代码之前,我一直都在调用/检查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()?总是在执行我的代码之前,总是在执行我的代码之后或取决于上下文/我在做什么?

最佳答案

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

总是在最后一个是更安全的,因为如果您在代码之前调用它,并且您的代码修改了可能导致beforeDelete中的代码失败的内容,那么由于beforeDelete之前被触发,现在不会发生这种情况。

在第一个示例中,您要在完全不相同的beforeValidate函数中调用beforeDelete

关于yii - 我应该何时在Yii模型中调用parent::beforeDelete(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24509331/

10-12 04:34