Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Doctrine Listener versus Subscriber

I'm working in the Symfony2 framework and wondering when would one use a Doctrine subscriber versus a listener. Doctrine's documentation for listeners is very clear, however subscribers are rather glossed over. Symfony's cookbook entry is similar.

like image 214
nurikabe Avatar asked May 24 '12 02:05

nurikabe


2 Answers

From my point of view, there is only one major difference:

  • The Listener is signed up specifying the events on which it listens.
  • The Subscriber has a method telling the dispatcher what events it is listening to

This might not seem like a big difference, but if you think about it, there are some cases when you want to use one over the other:

  • You can assign one listener to many dispatchers with different events, as they are set at registration time. You only need to make sure every method is in place in the listener
  • You can change the events a subscriber is registered for at runtime and even after registering the subscriber by changing the return value of getSubscribedEvents (Think about a time where you listen to a very noisy event and you only want to execute something one time)

There might be other differences I'm not aware of though!

like image 52
Sgoettschkes Avatar answered Oct 01 '22 12:10

Sgoettschkes


Don't know whether it is done accidentally or intentionally.. But subscribers have higher priority that listeners - https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Doctrine/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPass.php#L73-L98

From doctrine side, it doesn't care what it is (listener or subscriber), eventually both are registered as listeners - https://github.com/doctrine/common/blob/master/lib/Doctrine/Common/EventManager.php#L137-L140

This is what I spotted.

like image 42
Ruslan Polutsygan Avatar answered Oct 01 '22 11:10

Ruslan Polutsygan