防止Doctrine记录被删除的正确方法

时间:2010-11-22 11:58:45

标签: php doctrine record

我可以覆盖delete()的{​​{1}}方法吗?

Doctrine_Record

或使用class myRec extends myRecBase public function delete() { return false; } } 挂钩?或者在preDelete中抛出异常?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

一个选项是使用preDelete方法简单地一起跳过删除方法。

示例:

public function preDelete(Doctrine_Event $event)
{
   $event->skipOperation();
}

您应该可以在扩展的Doctrine_Record类中执行此操作,或者作为替代方法,使用侦听器执行此操作。在您希望应用程序的某些部分能够删除记录(例如,管理部分与客户端代码)的情况下,监听器可能是有益的。

使用侦听器方法,您可以使用上面的preDelete方法创建一个侦听器,并将其注册到您的表中,如下所示:

$userTable = Doctrine_Core::getTable('User');
$userTable->addRecordListener(new HydrationListener());

如果未注册监听器,您仍可以删除记录。如果注册了侦听器,则删除操作将不会持久存储到数据库中。

有关该方法的更多信息,请访问: http://www.doctrine-project.org/projects/orm/1.2/docs/manual/event-listeners/en

答案 1 :(得分:0)

恕我直言,我也可能这样做,因为preDelete钩子后来仍然会执行删除方法。