我应该在什么时候调用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();
}