3

到目前为止,我总是在我自己的代码parent::beforeDelete() 之前调用/检查结果:

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

        return TRUE;
    }

    return FALSE;
}

(从模型属性之一中去除不正确字符的示例)

但现在,我找到了这个答案

public function beforeDelete()
{
    foreach($this->qualifications as $q)
        $q->delete();
    return parent::beforeDelete();
}

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

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

4

1 回答 1

1

有些方法附加了事件侦听器,在这种情况下是onBeforeDelete事件。您必须调用父实现,以便正确引发事件。

总是放在最后更安全,因为如果你在代码之前调用它,并且你的代码修改了一些会导致代码beforeDelete失败的东西,那么现在就不会像beforeDelete之前触发的那样发生。

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

于 2014-07-01T13:23:09.057 回答