You are browsing a version that has not yet been released.

Event Listeners

In opposite to Entity Listeners, Event listeners are services that listen for all entities in your application.

See https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#implementing-event-listeners for more info on event listeners.

To register a service to act as an event listener you have to tag it with the doctrine.event_listener tag:

Starting with Doctrine bundle 2.8, you can use the AsDoctrineListener attribute to tag the service.

  • PHP
    1// src/App/EventListener/SearchIndexer.php namespace App\EventListener; use Doctrine\Bundle\DoctrineBundle\Attribute\AsDoctrineListener; use Doctrine\ORM\Event\LifecycleEventArgs; #[AsDoctrineListener('postPersist'/*, 500, 'default'*/)] class SearchIndexer { public function postPersist(LifecycleEventArgs $event): void { // ... } }
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
  • YAML
    1# config/services.yaml services: # ... App\EventListener\SearchIndexer: tags: - name: 'doctrine.event_listener' # this is the only required option for the lifecycle listener tag event: 'postPersist' # listeners can define their priority in case multiple subscribers or listeners are associated # to the same event (default priority = 0; higher numbers = listener is run earlier) priority: 500 # you can also restrict listeners to a specific Doctrine connection connection: 'default'
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
  • XML
    1<!-- config/services.xml --> <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:doctrine="http://symfony.com/schema/dic/doctrine"> <services> <!-- ... --> <!-- * 'event' is the only required option that defines the lifecycle listener * 'priority': used when multiple subscribers or listeners are associated to the same event * (default priority = 0; higher numbers = listener is run earlier) * 'connection': restricts the listener to a specific Doctrine connection --> <service id="App\EventListener\SearchIndexer"> <tag name="doctrine.event_listener" event="postPersist" priority="500" connection="default"/> </service> </services> </container>
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
  • PHP
    1// config/services.php namespace Symfony\Component\DependencyInjection\Loader\Configurator; use App\EventListener\SearchIndexer; return static function (ContainerConfigurator $configurator) { $services = $configurator->services(); // listeners are applied by default to all Doctrine connections $services->set(SearchIndexer::class) ->tag('doctrine.event_listener', [ // this is the only required option for the lifecycle listener tag 'event' => 'postPersist', // listeners can define their priority in case multiple subscribers or listeners are associated // to the same event (default priority = 0; higher numbers = listener is run earlier) 'priority' => 500, // you can also restrict listeners to a specific Doctrine connection 'connection' => 'default', ]) ; };
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23