Doctrine Symfony/EventSubscriber vs EntityListener
编辑:为了避免混淆,这个问题是关于和而不是关于 我正在学习Symfony事件,并研究EntityListeners和EventSubscribers是如何工作的 据我所知,EntityListener只连接到一个实体,而EventSubscriber方法会被所有实体调用。最终,在EventSubscriber类中,我必须执行以下操作:Doctrine Symfony/EventSubscriber vs EntityListener,doctrine,symfony,Doctrine,Symfony,编辑:为了避免混淆,这个问题是关于和而不是关于 我正在学习Symfony事件,并研究EntityListeners和EventSubscribers是如何工作的 据我所知,EntityListener只连接到一个实体,而EventSubscriber方法会被所有实体调用。最终,在EventSubscriber类中,我必须执行以下操作: public function prePersist(LifecycleEventArgs $args) { $object = $args->ge
public function prePersist(LifecycleEventArgs $args)
{
$object = $args->getObject();
if ($object instanceof xxxxxxx) {
$this->doSomething();
}
}
所以当我需要监听单个实体的事件时,我应该使用EntityListener,当我想要监听所有实体的事件时,我应该使用EventSubscriber
但是。。。看看最流行的bundle,比如FOSUserBundle、VichUploaderBundle、SonataMediaBundle等,它们都使用EventSubscriber接口,没有一个使用EntityListener。即使他们只需要听一个实体
我还没有看到使用EntityListener的包
我的问题是:为什么
在我看来,EntityListener应该更高效,因为它只为单个实体激发。打电话说每个实体更新20个预更新订阅者似乎不是很优化
EntityListener仅附加到一个实体,而EventSubscriber
为所有实体调用方法
无法将EntityListeners与EventListeners/EventSubscribers进行比较
与实现事件侦听器不同,实体侦听器仅对指定的实体调用。
实体侦听器:实体侦听器是用于实体的生命周期侦听器类。
甚至监听器:它们位于实体之上,允许您跨不同的实体类实现可重用的行为。
引用事件侦听器和事件订阅者之间的差异:
用户的主要优势(以及Symfony切换的原因)
在2.1)中,对他们来说,它将事件的知识保存在
类,而不是在服务定义中,使其更易于重用
其他上下文中的侦听器(例如Silex,这就是为什么
Symfony代码已更改)
另一方面,通过服务定义注册侦听器
为捆绑包的DI设置提供了更大的灵活性(允许添加
标记有条件地基于配置(例如)
您确定您指的是EntityListener而不是EventListener吗?EntityListener似乎已添加到Symfony 2.4中,您正在混合内容。EntityListener不是EventListener/EventsSubscriber。他们在不同层次的学说上工作。检查我的最新答案。