到目前为止,在我自己编写代码之前,我一直都在调用/检查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/