From f0056493153a8958c572ac30a32f2ca2c80a3c9f Mon Sep 17 00:00:00 2001
From: Fabien Potencier
Date: Thu, 13 Dec 2012 16:01:47 +0100
Subject: [PATCH] [WebProfilerBundle] decoupled the bundle from TwigBundle
---
.../Controller/ExceptionController.php | 55 +++++++++++++++++--
.../Resources/config/profiler.xml | 1 +
.../views/Collector/exception.html.twig | 4 +-
3 files changed, 52 insertions(+), 8 deletions(-)
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php b/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php
index 0ff7492b7c..170d61a251 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php
+++ b/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php
@@ -12,6 +12,8 @@
namespace Symfony\Bundle\WebProfilerBundle\Controller;
use Symfony\Component\HttpKernel\Exception\FlattenException;
+use Symfony\Component\HttpKernel\Profiler\Profiler;
+use Symfony\Component\HttpKernel\Debug\ExceptionHandler;
use Symfony\Component\HttpFoundation\Response;
/**
@@ -23,26 +25,39 @@ class ExceptionController
{
protected $twig;
protected $debug;
+ protected $profiler;
- public function __construct(\Twig_Environment $twig, $debug)
+ public function __construct(Profiler $profiler, \Twig_Environment $twig, $debug)
{
+ $this->profiler = $profiler;
$this->twig = $twig;
$this->debug = $debug;
}
/**
- * Converts an Exception to a Response.
+ * Renders the exception panel for the given token.
*
- * @param FlattenException $exception A FlattenException instance
+ * @param string $token The profiler token
*
- * @return Response
+ * @return Response A Response instance
*/
- public function showAction(FlattenException $exception)
+ public function showAction($token)
{
+ $this->profiler->disable();
+
+ $exception = $this->profiler->loadProfile($token)->getCollector('exception')->getException();
+ $template = $this->getTemplate();
+
+ if (!$this->twig->getLoader()->exists($template)) {
+ $handler = new ExceptionHandler();
+
+ return new Response($handler->getContent($exception));
+ }
+
$code = $exception->getStatusCode();
return new Response($this->twig->render(
- '@Twig/Exception/'.($this->debug ? 'exception' : 'error').'.html.twig',
+ $template,
array(
'status_code' => $code,
'status_text' => Response::$statusTexts[$code],
@@ -52,4 +67,32 @@ class ExceptionController
)
));
}
+
+ /**
+ * Renders the exception panel stylesheet for the given token.
+ *
+ * @param string $token The profiler token
+ *
+ * @return Response A Response instance
+ */
+ public function cssAction($token)
+ {
+ $this->profiler->disable();
+
+ $exception = $this->profiler->loadProfile($token)->getCollector('exception')->getException();
+ $template = $this->getTemplate();
+
+ if (!$this->twig->getLoader()->exists($template)) {
+ $handler = new ExceptionHandler();
+
+ return new Response($handler->getStylesheet($exception));
+ }
+
+ return new Response($this->twig->render('@WebProfiler/Collector/exception.css.twig'));
+ }
+
+ protected function getTemplate()
+ {
+ return '@Twig/Exception/'.($this->debug ? 'exception' : 'error').'.html.twig';
+ }
}
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/profiler.xml b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/profiler.xml
index 02aa6bd3e3..22d12409cd 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Resources/config/profiler.xml
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/config/profiler.xml
@@ -26,6 +26,7 @@
+
%kernel.debug%
diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/exception.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/exception.html.twig
index b498188be5..fa1e75ec96 100644
--- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/exception.html.twig
+++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/exception.html.twig
@@ -2,7 +2,7 @@
{% block head %}
{{ parent() }}
{% endblock %}
@@ -28,7 +28,7 @@
{% else %}
- {% render 'web_profiler.controller.exception:showAction' with { 'exception': collector.exception, 'format': 'html' } %}
+ {% render 'web_profiler.controller.exception:showAction' with { 'token': token } %}
{% endif %}
{% endblock %}