Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. TraceableEventDispatcher.php

function TraceableEventDispatcher::beforeDispatch

Same name in this branch
  1. 11.1.x vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php \Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher::beforeDispatch()

Overrides TraceableEventDispatcher::beforeDispatch

File

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

Class

TraceableEventDispatcher
Collects some data about event listeners.

Namespace

Symfony\Component\HttpKernel\Debug

Code

protected function beforeDispatch(string $eventName, object $event) : void {
    switch ($eventName) {
        case KernelEvents::REQUEST:
            $event->getRequest()->attributes
                ->set('_stopwatch_token', bin2hex(random_bytes(3)));
            $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:
            $sectionId = $event->getRequest()->attributes
                ->get('_stopwatch_token');
            if (null === $sectionId) {
                break;
            }
            // 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($sectionId);
            } catch (\LogicException) {
            }
            break;
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal