From f7aa6c006ea99ee90e58725b224d069091377e22 Mon Sep 17 00:00:00 2001 From: Christophe Coevoet Date: Mon, 20 Feb 2012 01:10:53 +0100 Subject: [PATCH] [MonologBridge] Added the Response-aware ChromePhpHandler --- .../Monolog/Handler/ChromePhpHandler.php | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/Symfony/Bridge/Monolog/Handler/ChromePhpHandler.php diff --git a/src/Symfony/Bridge/Monolog/Handler/ChromePhpHandler.php b/src/Symfony/Bridge/Monolog/Handler/ChromePhpHandler.php new file mode 100644 index 0000000000..bc44403f1f --- /dev/null +++ b/src/Symfony/Bridge/Monolog/Handler/ChromePhpHandler.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\Monolog\Handler; + +use Monolog\Handler\ChromePhpHandler as BaseChromePhpHandler; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\HttpKernelInterface; + +/** + * ChromePhpHandler. + * + * @author Christophe Coevoet + */ +class ChromePhpHandler extends BaseChromePhpHandler +{ + /** + * @var array + */ + private $headers = array(); + + /** + * @var Response + */ + private $response; + + /** + * Adds the headers to the response once it's created + */ + public function onKernelResponse(FilterResponseEvent $event) + { + if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { + return; + } + + /* TODO: change this part once ChromePhpHandler has a way to detect the extension + if (!preg_match('{\bFirePHP/\d+\.\d+\b}', $event->getRequest()->headers->get('User-Agent')) + && !$event->getRequest()->headers->has('X-FirePHP-Version')) { + + $this->sendHeaders = false; + $this->headers = array(); + + return; + } + */ + + $this->response = $event->getResponse(); + foreach ($this->headers as $header => $content) { + $this->response->headers->set($header, $content); + } + $this->headers = array(); + } + + /** + * {@inheritDoc} + */ + protected function sendHeader($header, $content) + { + if (!$this->sendHeaders) { + return; + } + + if ($this->response) { + $this->response->headers->set($header, $content); + } else { + $this->headers[$header] = $content; + } + } + + /** + * Override default behavior since we check it in onKernelResponse + */ + protected function headersAccepted() + { + return true; + } +}