一千萬個為什麽

搜索

以編程方式取消註冊事件觀察器

有誰知道是否可以以編程方式取消註冊事件觀察者?我在 newslettersubscribesaveafter 上有一個觀察者,用於更新客戶模型中的自定義屬性,但是當保存客戶記錄時,它會觸發 MageAll.xml中定義的 customersaveafter 事件。 然後重新保存新聞稿訂閱狀態,導致無限循環,然後由於嵌套100次而觸發PHP遞歸錯誤。 理想情況下,我只想在我的觀察者觸發時取消註冊 customersaveafter 事件。

最佳答案

您可以嘗試將事件標記為 dispatched ,並且在第二次嘗試運行它時,如果已經調度它就不執行任何操作。例如,假設您的方法名為 updateCustomer()。 public function updateCustomer($observer){ if (Mage::registry('myeventwasdispatched') == 1){//do nothing if the event was dispatched return $this; } //your code here Mage::register('myeventwasdispatched', 1);//mark the event as dispatched. }

註冊表項名稱並不重要,只需確保在兩種情況下都使用相同的名稱。

轉載註明原文: 以編程方式取消註冊事件觀察器