@@ -214,5 +214,58 @@ interface and have an event method for each event it subscribes to::
214214
215215For a full reference, see chapter `The Event System `_ in the Doctrine documentation.
216216
217+ Lazy loading for Event Listeners
218+ --------------------------------
219+
220+ One subtle difference between listeners and subscribers is that Symfony can load
221+ entity listeners lazily. This means that your listener class will only be fetched
222+ from the service container (and thus be instantiated) once the event it is linked
223+ to actually fires.
224+
225+ Lazy loading might give you a slight performance improvement when your listener
226+ runs for events that rarely fire. Also, it can help you when you run into
227+ *circular dependency issues * that may occur when your listener service in turn
228+ depends on the DBAL connection.
229+
230+ To mark a listener service as lazily loaded, just add the ``lazy `` attribute
231+ to the tag like so:
232+
233+ .. configuration-block ::
234+
235+ .. code-block :: yaml
236+
237+ services :
238+ my.listener :
239+ class : AppBundle\EventListener\SearchIndexer
240+ tags :
241+ - { name: doctrine.event_listener, event: postPersist, lazy: true }
242+
243+ .. code-block :: xml
244+
245+ <?xml version =" 1.0" ?>
246+ <container xmlns =" http://symfony.com/schema/dic/services"
247+ xmlns : doctrine =" http://symfony.com/schema/dic/doctrine" >
248+
249+ <services >
250+ <service id =" my.listener" class =" AppBundle\EventListener\SearchIndexer" >
251+ <tag name =" doctrine.event_listener" event =" postPersist" lazy =" true" />
252+ </service >
253+ </services >
254+ </container >
255+
256+ .. code-block :: php
257+
258+ use AppBundle\EventListener\SearchIndexer;
259+
260+ $container
261+ ->register('my.listener', SearchIndexer::class)
262+ ->addTag('doctrine.event_listener', array('event' => 'postPersist', 'lazy' => 'true'))
263+ ;
264+
265+ .. note ::
266+
267+ Marking an event listener as ``lazy `` has nothing to do with lazy service
268+ definitions which are described :doc: `in their own section </service_container/lazy_services >`
269+
217270.. _`The Event System` : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html
218271.. _`the Doctrine Documentation` : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#entity-listeners
0 commit comments