[WebProfilerBundle] fixed the profiler when the WDT is disabled

This commit is contained in:
Fabien Potencier 2011-06-26 17:59:43 +02:00
parent 600cd415e6
commit a19c336c18
5 changed files with 40 additions and 21 deletions

View File

@ -156,7 +156,7 @@ class ProfilerController extends ContainerAware
'profile' => $profile, 'profile' => $profile,
'templates' => $this->getTemplates($profiler), 'templates' => $this->getTemplates($profiler),
'profiler_url' => $url, 'profiler_url' => $url,
'verbose' => $this->container->get('web_profiler.debug_toolbar')->getVerbose() 'verbose' => $this->container->get('web_profiler.debug_toolbar')->isVerbose()
)); ));
} }

View File

@ -16,6 +16,7 @@ use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Definition\Processor; use Symfony\Component\Config\Definition\Processor;
use Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener;
/** /**
* WebProfilerExtension. * WebProfilerExtension.
@ -43,13 +44,19 @@ class WebProfilerExtension extends Extension
$configuration = new Configuration(); $configuration = new Configuration();
$config = $processor->processConfiguration($configuration, $configs); $config = $processor->processConfiguration($configuration, $configs);
if ($config['toolbar']) {
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('toolbar.xml'); $loader->load('toolbar.xml');
$container->setParameter('web_profiler.debug_toolbar.intercept_redirects', $config['intercept_redirects']); $container->setParameter('web_profiler.debug_toolbar.intercept_redirects', $config['intercept_redirects']);
$container->setParameter('web_profiler.debug_toolbar.verbose', $config['verbose']);
if (!$config['toolbar']) {
$mode = WebDebugToolbarListener::DISABLED;
} elseif ($config['verbose']) {
$mode = WebDebugToolbarListener::ENABLED;
} else {
$mode = WebDebugToolbarListener::ENABLED_MINIMAL;
} }
$container->setParameter('web_profiler.debug_toolbar.mode', $mode);
} }
/** /**

View File

@ -16,6 +16,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Bundle\TwigBundle\TwigEngine; use Symfony\Bundle\TwigBundle\TwigEngine;
use Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener;
/** /**
* WebDebugToolbarListener injects the Web Debug Toolbar. * WebDebugToolbarListener injects the Web Debug Toolbar.
@ -29,20 +30,29 @@ use Symfony\Bundle\TwigBundle\TwigEngine;
*/ */
class WebDebugToolbarListener class WebDebugToolbarListener
{ {
const DISABLED = 1;
const ENABLED = 2;
const ENABLED_MINIMAL = 3;
protected $templating; protected $templating;
protected $interceptRedirects; protected $interceptRedirects;
protected $verbose; protected $mode;
public function __construct(TwigEngine $templating, $interceptRedirects = false, $verbose = true) public function __construct(TwigEngine $templating, $interceptRedirects = false, $mode = self::ENABLED)
{ {
$this->templating = $templating; $this->templating = $templating;
$this->interceptRedirects = (Boolean) $interceptRedirects; $this->interceptRedirects = (Boolean) $interceptRedirects;
$this->verbose = (Boolean) $verbose; $this->mode = (integer) $mode;
} }
public function getVerbose() public function isVerbose()
{ {
return $this->verbose; return self::ENABLED === $this->mode;
}
public function isEnabled()
{
return self::DISABLED !== $this->mode;
} }
public function onKernelResponse(FilterResponseEvent $event) public function onKernelResponse(FilterResponseEvent $event)
@ -70,7 +80,8 @@ class WebDebugToolbarListener
$response->headers->remove('Location'); $response->headers->remove('Location');
} }
if (!$response->headers->has('X-Debug-Token') if (self::DISABLED === $this->mode
|| !$response->headers->has('X-Debug-Token')
|| '3' === substr($response->getStatusCode(), 0, 1) || '3' === substr($response->getStatusCode(), 0, 1)
|| ($response->headers->has('Content-Type') && false === strpos($response->headers->get('Content-Type'), 'html')) || ($response->headers->has('Content-Type') && false === strpos($response->headers->get('Content-Type'), 'html'))
|| 'html' !== $request->getRequestFormat() || 'html' !== $request->getRequestFormat()

View File

@ -13,7 +13,7 @@
<tag name="kernel.event_listener" event="kernel.response" method="onKernelResponse" priority="-128" /> <tag name="kernel.event_listener" event="kernel.response" method="onKernelResponse" priority="-128" />
<argument type="service" id="templating.engine.twig" /> <argument type="service" id="templating.engine.twig" />
<argument>%web_profiler.debug_toolbar.intercept_redirects%</argument> <argument>%web_profiler.debug_toolbar.intercept_redirects%</argument>
<argument>%web_profiler.debug_toolbar.verbose%</argument> <argument>%web_profiler.debug_toolbar.mode%</argument>
</service> </service>
</services> </services>
</container> </container>

View File

@ -91,7 +91,7 @@ class WebProfilerExtensionTest extends TestCase
$extension = new WebProfilerExtension(); $extension = new WebProfilerExtension();
$extension->load(array(array()), $this->container); $extension->load(array(array()), $this->container);
$this->assertFalse($this->container->has('web_profiler.debug_toolbar')); $this->assertFalse($this->container->get('web_profiler.debug_toolbar')->isEnabled());
$this->assertSaneContainer($this->getDumpedContainer()); $this->assertSaneContainer($this->getDumpedContainer());
} }
@ -99,14 +99,13 @@ class WebProfilerExtensionTest extends TestCase
/** /**
* @dataProvider getDebugModes * @dataProvider getDebugModes
*/ */
public function testToolbarConfig($debug) public function testToolbarConfig($enabled, $verbose)
{ {
$this->container->setParameter('kernel.debug', $debug);
$extension = new WebProfilerExtension(); $extension = new WebProfilerExtension();
$extension->load(array(array('toolbar' => $debug)), $this->container); $extension->load(array(array('toolbar' => $enabled, 'verbose' => $verbose)), $this->container);
$this->assertTrue($debug === $this->container->has('web_profiler.debug_toolbar'), '->load() registers web_profiler.debug_toolbar only when toolbar is true'); $this->assertSame($enabled, $this->container->get('web_profiler.debug_toolbar')->isEnabled());
$this->assertSame($enabled && $verbose, $this->container->get('web_profiler.debug_toolbar')->isVerbose());
$this->assertSaneContainer($this->getDumpedContainer()); $this->assertSaneContainer($this->getDumpedContainer());
} }
@ -114,8 +113,10 @@ class WebProfilerExtensionTest extends TestCase
public function getDebugModes() public function getDebugModes()
{ {
return array( return array(
array(true), array(true, true),
array(false), array(true, false),
array(false, false),
array(false, true),
); );
} }