2010-11-22 40 views
2

我可以只覆蓋delete()方法Doctrine_Record正確的方法來防止刪除原則記錄

class myRec extends myRecBase 
    public function delete() { 
    return false; 
    } 
} 

或使用preDelete掛鉤?或者在delete()中拋出異常?

任何幫助將不勝感激。

回答

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

0

恕我直言,我可能會這樣做,因爲preDelete鉤子仍然會執行刪除方法。

相關問題