2016-09-25 70 views

回答

0

這裏沒有一個簡單的方法 - 在需要相同功能時檢查Illuminate(v4.2)代碼後,我可以看到「忘記」是唯一方法,並且刪除所有偵聽器,事件。

但是,您可以使用getListeners($eventName)獲取所有偵聽器,處理返回的數組,刪除特定的偵聽器,忘記事件,然後重新偵聽剩餘的偵聽器。非常可怕,會將你的代碼綁定到Event實現的內部結構。

否則,您可以在您的監聽器中標記「從現在開始忽略」消息。

另一個想法是在您的偵聽器之前添加一個偵聽器,並在其事件處理函數中返回false,這甚至會停止傳播!當然這會阻止所有後續用戶接收事件。如果您知道訂閱​​順序可能會有所幫助,但很麻煩。

這似乎是一個顯而易見的缺失功能,但可能是因爲短期進程的PHP的典型用法。我正在寫一個持續數日的工作,所以我還需要動態地添加/刪除監聽器。 Laravel對靜力學的偏好使得這很困難。

我正在考慮使用「全部重新登錄」例程,它只是忘記所有事件,並重新訂購所有從頭開始使用當前配置。