nur*_*abe 73 symfony doctrine-orm
我正在使用Symfony2框架,并想知道何时使用Doctrine订阅者而不是听众.Doctrine 为听众提供的文档非常清晰,但是订阅者却被掩盖了.Symfony的食谱入门类似.
Sgo*_*kes 86
从我的角度来看,只有一个主要区别:
这可能看起来不是一个很大的区别,但是如果你考虑一下,有些情况下你想要使用一个而不是另一个:
getSubscribedEvents(想想您听一个非常嘈杂的事件的时间而您只想执行一次)可能还有其他我不知道的差异!
不知道是不是意外地或故意地完成了..但是订阅者具有更高的听众优先级 - https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPass .php#如果L73-L98
从学说方面来看,它并不关心它是什么(听众或订阅者),最终都被注册为听众 - https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/EventManager.php #L137-L140
这就是我发现的.
当你想在一个类中处理多个事件时,你应该使用事件订阅者,例如在这篇symfony2文档页面文章中,人们可能会注意到事件监听器只能管理一个事件,但是假设你想要为一个事件处理多个事件实体,prePersist,preUpdate,postPersist等...如果你使用事件监听器,你必须编写几个事件监听器,每个事件一个,但如果你去事件用户,你只需要编写一个类事件susbcriber,看看使用事件订阅者,您可以在一个类中管理多个事件,这就是我使用它的方式,我更倾向于将代码集中在模型业务需要的地方,这可能是您想要处理几个生命周期事件的一个示例只为一组实体,你可以编写一个父类并在其中定义那些全局方法,然后让你的实体继承该类,然后在你的事件中,你订阅你想要的每个事件,prePersist,preUpdate,po stPersist等...然后请求该父类并执行这些全局方法.