currentUser = $currentUser; $this->urlGenerator = $urlGenerator; $this->renderer = $renderer; } /** * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event */ public function onKernelResponse(FilterResponseEvent $event) { $response = $event->getResponse(); $request = $event->getRequest(); if ($response->headers->has('X-Debug-Token') && NULL !== $this->urlGenerator) { $response->headers->set( 'X-Debug-Token-Link', $this->urlGenerator->generate('webprofiler.dashboard', ['profile' => $response->headers->get('X-Debug-Token')]) ); } // do not capture redirects or modify XML HTTP Requests if ($request->isXmlHttpRequest()) { return; } if ($this->currentUser->hasPermission('view webprofiler toolbar')) { $this->injectToolbar($response); } } /** * @param \Symfony\Component\HttpFoundation\Response $response */ protected function injectToolbar(Response $response) { $content = $response->getContent(); $pos = mb_strripos($content, ''); if (FALSE !== $pos) { if ($token = $response->headers->get('X-Debug-Token')) { $loader = [ '#theme' => 'webprofiler_loader', '#token' => $token, '#profiler_url' => $this->urlGenerator->generate('webprofiler.toolbar', ['profile' => $token]), ]; $content = mb_substr($content, 0, $pos) . $this->renderer->renderRoot($loader) . mb_substr($content, $pos); $response->setContent($content); } } } /** * @return array */ public static function getSubscribedEvents() { return [ KernelEvents::RESPONSE => ['onKernelResponse', -128], ]; } }