暂时听一个事件,即" unlisten"?

时间:2016-09-25 08:08:20

标签: laravel-5.3

Laravel是否可以删除我添加的特定事件侦听器,而不是所有侦听器侦听给定事件(forget($event)一样)?

1 个答案:

答案 0 :(得分:0)

没有简单的方法可以这样做 - 在需要相同功能时检查Illuminate(v4.2)代码后,我可以看到忘记是唯一的方法并删除所有侦听器,因为所有优先级都是事件

但是,您可以使用getListeners($eventName)获取所有侦听器,处理返回的数组,删除您的特定侦听器,忘记该事件,然后重新侦听剩余的侦听器。非常可怕,并将您的代码绑定到Event实现的内部结构。

否则你可以在你的听众内部标记为"忽略"从现在开始的消息。

另一个想法是在你的监听器之前添加一个监听器,并在其事件处理程序中返回false,这甚至会阻止传播!当然,这会阻止所有后续订阅者接收该事件。如果您知道订阅​​顺序,它可能有所帮助,但是很麻烦。

这似乎是一个明显缺失的功能,但可能是因为PHP通常用于短期流程。我写的是一个持续数天的工作者,所以我还需要动态添加/删除监听器。 Laravel对静力学的偏爱使这很困难。

我考虑使用"重新订阅全部"例程,它会忘记所有事件,并使用当前配置从头开始重新订阅所有内容。