暂时收听一个事件,即 "unlisten"?
Listen to an event temporarily i.e. "unlisten"?
是否可以在 Laravel 中删除我添加的 特定 事件侦听器,而不是 ALL 侦听器给定事件(forget($event)
所做的)?
没有一个简单的方法可以做到这一点 - 在需要相同功能时检查 Illuminate (v4.2) 代码后,我可以看到忘记是唯一的方法并删除所有侦听器,对于所有优先级一个事件。
但是您可以使用 getListeners($eventName)
获取所有侦听器,处理 returned 数组删除您的特定侦听器,忘记事件,然后重新侦听其余侦听器。非常可怕,会将您的代码绑定到事件实现的内部结构。
否则,从现在开始,您可以在监听器中标记 "ignore" 条消息。
另一个想法是在您的侦听器之前添加一个侦听器,并在其事件处理程序中添加 return false,这甚至会停止传播!当然,这会阻止所有后续订阅者接收事件。如果您知道订阅顺序,它可能会有所帮助,但很混乱。
这似乎是一个明显缺失的功能,但可能是因为 PHP 通常用于短期进程。我正在写一个持续数天的工作人员,所以我还需要 add/remove 动态听众。 Laravel 对静态的偏爱使这变得困难。
我正在考虑使用 "resubscribe all" 例程,它会忘记所有事件并使用当前配置从头开始重新订阅所有内容。
是否可以在 Laravel 中删除我添加的 特定 事件侦听器,而不是 ALL 侦听器给定事件(forget($event)
所做的)?
没有一个简单的方法可以做到这一点 - 在需要相同功能时检查 Illuminate (v4.2) 代码后,我可以看到忘记是唯一的方法并删除所有侦听器,对于所有优先级一个事件。
但是您可以使用 getListeners($eventName)
获取所有侦听器,处理 returned 数组删除您的特定侦听器,忘记事件,然后重新侦听其余侦听器。非常可怕,会将您的代码绑定到事件实现的内部结构。
否则,从现在开始,您可以在监听器中标记 "ignore" 条消息。
另一个想法是在您的侦听器之前添加一个侦听器,并在其事件处理程序中添加 return false,这甚至会停止传播!当然,这会阻止所有后续订阅者接收事件。如果您知道订阅顺序,它可能会有所帮助,但很混乱。
这似乎是一个明显缺失的功能,但可能是因为 PHP 通常用于短期进程。我正在写一个持续数天的工作人员,所以我还需要 add/remove 动态听众。 Laravel 对静态的偏爱使这变得困难。
我正在考虑使用 "resubscribe all" 例程,它会忘记所有事件并使用当前配置从头开始重新订阅所有内容。