You are here

class TraceableEventDispatcher in Zircon Profile 8

Same name in this branch
  1. 8 vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php \Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher
  2. 8 vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php \Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher
Same name and namespace in other branches
  1. 8.0 vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php \Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher

Collects some data about event listeners.

This event dispatcher delegates the dispatching to another one.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

Expanded class hierarchy of TraceableEventDispatcher

1 file declares its use of TraceableEventDispatcher
TraceableEventDispatcherTest.php in vendor/symfony/http-kernel/Tests/Debug/TraceableEventDispatcherTest.php

File

vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php, line 26

Namespace

Symfony\Component\HttpKernel\Debug
View source
class TraceableEventDispatcher extends BaseTraceableEventDispatcher {

  /**
   * Sets the profiler.
   *
   * The traceable event dispatcher does not use the profiler anymore.
   * The job is now done directly by the Profiler listener and the
   * data collectors themselves.
   *
   * @param Profiler|null $profiler A Profiler instance
   *
   * @deprecated since version 2.4, to be removed in 3.0.
   */
  public function setProfiler(Profiler $profiler = null) {
    @trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
  }

  /**
   * {@inheritdoc}
   */
  protected function preDispatch($eventName, Event $event) {
    switch ($eventName) {
      case KernelEvents::REQUEST:
        $this->stopwatch
          ->openSection();
        break;
      case KernelEvents::VIEW:
      case KernelEvents::RESPONSE:

        // stop only if a controller has been executed
        if ($this->stopwatch
          ->isStarted('controller')) {
          $this->stopwatch
            ->stop('controller');
        }
        break;
      case KernelEvents::TERMINATE:
        $token = $event
          ->getResponse()->headers
          ->get('X-Debug-Token');

        // There is a very special case when using built-in AppCache class as kernel wrapper, in the case
        // of an ESI request leading to a `stale` response [B]  inside a `fresh` cached response [A].
        // In this case, `$token` contains the [B] debug token, but the  open `stopwatch` section ID
        // is equal to the [A] debug token. Trying to reopen section with the [B] token throws an exception
        // which must be caught.
        try {
          $this->stopwatch
            ->openSection($token);
        } catch (\LogicException $e) {
        }
        break;
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function postDispatch($eventName, Event $event) {
    switch ($eventName) {
      case KernelEvents::CONTROLLER:
        $this->stopwatch
          ->start('controller', 'section');
        break;
      case KernelEvents::RESPONSE:
        $token = $event
          ->getResponse()->headers
          ->get('X-Debug-Token');
        $this->stopwatch
          ->stopSection($token);
        break;
      case KernelEvents::TERMINATE:

        // In the special case described in the `preDispatch` method above, the `$token` section
        // does not exist, then closing it throws an exception which must be caught.
        $token = $event
          ->getResponse()->headers
          ->get('X-Debug-Token');
        try {
          $this->stopwatch
            ->stopSection($token);
        } catch (\LogicException $e) {
        }
        break;
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
TraceableEventDispatcher::$called private property
TraceableEventDispatcher::$dispatcher private property
TraceableEventDispatcher::$logger protected property
TraceableEventDispatcher::$stopwatch protected property
TraceableEventDispatcher::$wrappedListeners private property
TraceableEventDispatcher::addListener public function Adds an event listener that listens on the specified events. Overrides EventDispatcherInterface::addListener
TraceableEventDispatcher::addSubscriber public function Adds an event subscriber. Overrides EventDispatcherInterface::addSubscriber
TraceableEventDispatcher::dispatch public function Dispatches an event to all registered listeners. Overrides EventDispatcherInterface::dispatch
TraceableEventDispatcher::getCalledListeners public function Gets the called listeners. Overrides TraceableEventDispatcherInterface::getCalledListeners
TraceableEventDispatcher::getListenerInfo private function Returns information about the listener.
TraceableEventDispatcher::getListeners public function Gets the listeners of a specific event or all listeners sorted by descending priority. Overrides EventDispatcherInterface::getListeners
TraceableEventDispatcher::getNotCalledListeners public function Gets the not called listeners. Overrides TraceableEventDispatcherInterface::getNotCalledListeners
TraceableEventDispatcher::hasListeners public function Checks whether an event has any registered listeners. Overrides EventDispatcherInterface::hasListeners
TraceableEventDispatcher::postDispatch protected function Called after dispatching the event. Overrides TraceableEventDispatcher::postDispatch
TraceableEventDispatcher::postProcess private function
TraceableEventDispatcher::preDispatch protected function Called before dispatching the event. Overrides TraceableEventDispatcher::preDispatch
TraceableEventDispatcher::preProcess private function
TraceableEventDispatcher::removeListener public function Removes an event listener from the specified events. Overrides EventDispatcherInterface::removeListener
TraceableEventDispatcher::removeSubscriber public function Removes an event subscriber. Overrides EventDispatcherInterface::removeSubscriber
TraceableEventDispatcher::setProfiler Deprecated public function Sets the profiler.
TraceableEventDispatcher::__call public function Proxies all method calls to the original event dispatcher.
TraceableEventDispatcher::__construct public function Constructor.