diff --git a/components/event_dispatcher/index.rst b/components/event_dispatcher/index.rst index 6b64837cb01..27cd9155cd4 100644 --- a/components/event_dispatcher/index.rst +++ b/components/event_dispatcher/index.rst @@ -8,3 +8,4 @@ EventDispatcher container_aware_dispatcher generic_event immutable_dispatcher + traceable_dispatcher diff --git a/components/event_dispatcher/traceable_dispatcher.rst b/components/event_dispatcher/traceable_dispatcher.rst new file mode 100644 index 00000000000..6b1cb19db86 --- /dev/null +++ b/components/event_dispatcher/traceable_dispatcher.rst @@ -0,0 +1,46 @@ +.. index:: + single: EventDispatcher; Debug + single: EventDispatcher; Traceable + +The Traceable Event Dispatcher +============================== + +The :class:`Symfony\\Component\\HttpKernel\\Debug\\TraceableEventDispatcher` +is an event dispatcher that wraps any other event dispatcher and can then +be used to determine which event listeners have been called by the dispatcher. +Pass the event dispatcher to be wrapped and an instance of the +:class:`Symfony\\Component\\Stopwatch\\Stopwatch` to its constructor:: + + use Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher; + use Symfony\Component\Stopwatch\Stopwatch; + + // the event dispatcher to debug + $eventDispatcher = ...; + + $traceableEventDispatcher = new TraceableEventDispatcher($eventDispatcher, new Stopwatch()); + +Now, the ``TraceableEventDispatcher`` can be used like any other event dispatcher +to register event listeners and dispatch events:: + + // ... + + // register an event listener + $eventListener = ...; + $priority = ...; + $traceableEventDispatcher->addListener('the-event-name', $eventListener, $priority); + + // dispatch an event + $event = ...; + $traceableEventDispatcher->dispatch('the-event-name', $event); + +After your application has been processed, you can use the +:method:`Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface::getCalledListeners` +method to retrieve an array of event listeners that have been called in your +application. Similarly, the +:method:`Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface::getNotCalledListeners` +method returns an array of event listeners that have not been called:: + + // ... + + $calledListeners = $traceableEventDispatcher->getCalledListeners(); + $notCalledListeners = $traceableEventDispatcher->getNotCalledListeners(); diff --git a/components/map.rst.inc b/components/map.rst.inc index d3057cb53c6..207b57a7709 100644 --- a/components/map.rst.inc +++ b/components/map.rst.inc @@ -57,6 +57,7 @@ * :doc:`/components/event_dispatcher/container_aware_dispatcher` * :doc:`/components/event_dispatcher/generic_event` * :doc:`/components/event_dispatcher/immutable_dispatcher` + * :doc:`/components/event_dispatcher/traceable_dispatcher` * :doc:`/components/expression_language/index`