編輯:爲了避免混淆,這個問題是關於Entity Listener和不是Event Listener的Symfony /原則EventSubscriber VS EntityListener
我學習Symfony的事件,並尋找到EntityListeners和EventSubscribers如何工作。
據我所知,EntityListener只附加到一個實體,而EventSubscriber方法被所有實體調用。最終在EventSubscriber類我必須做這樣的事情:
public function prePersist(LifecycleEventArgs $args)
{
$object = $args->getObject();
if ($object instanceof xxxxxxx) {
$this->doSomething();
}
}
所以這樣看來,每當我需要聽一個單一的實體的事件,我應該用EntityListener,當我要聽事件在所有Doctrine實體中,我應該使用EventSubscriber。
但是......看着最受歡迎的軟件包,如FOSUserBundle,VichUploaderBundle,SonataMediaBundle等,它們都使用EventSubscriber界面,而且都沒有使用EntityListener。儘管他們只需要聆聽一個實體。
我還沒有看到使用EntityListener的包。
我的問題是:爲什麼?
從我的角度來看,EntityListener應該更有效率,因爲它只會觸發單個實體。調用說,每個實體更新20個更新前的訂閱者看起來並不是非常優化的?
你確定是指EntityListener而不是EventListener? EntityListener似乎已被添加到Symfony 2.4中 – Karolis
您正在混合的東西。 EntityListener不是EventListener/EventSybscriber。他們在不同的學說層面工作。檢查我更新的答案。 –