From f65a526e7d57e2fb584c6409d798eb52236d8f03 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sun, 15 Sep 2013 20:39:31 +0200 Subject: [PATCH] [FrameworkBundle] made sure that the debug event dispatcher is used everywhere --- .../Compiler/RegisterKernelListenersPass.php | 4 ++-- .../DependencyInjection/FrameworkExtension.php | 12 +++++++----- .../FrameworkBundle/Resources/config/debug.xml | 2 +- .../Compiler/RegisterKernelListenersPassTest.php | 4 ++++ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/RegisterKernelListenersPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/RegisterKernelListenersPass.php index ad406eb6a3..49e7a3edce 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/RegisterKernelListenersPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/RegisterKernelListenersPass.php @@ -18,11 +18,11 @@ class RegisterKernelListenersPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { - if (!$container->hasDefinition('event_dispatcher')) { + if (!$container->hasDefinition('event_dispatcher') && !$container->hasAlias('event_dispatcher')) { return; } - $definition = $container->getDefinition('event_dispatcher'); + $definition = $container->findDefinition('event_dispatcher'); foreach ($container->findTaggedServiceIds('kernel.event_listener') as $id => $events) { foreach ($events as $event) { diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index b4decdfefc..767400b16d 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -51,12 +51,14 @@ class FrameworkExtension extends Extension if ($container->getParameter('kernel.debug')) { $loader->load('debug.xml'); - // only HttpKernel needs the debug event dispatcher $definition = $container->findDefinition('http_kernel'); - $arguments = $definition->getArguments(); - $arguments[0] = new Reference('debug.event_dispatcher'); - $arguments[2] = new Reference('debug.controller_resolver'); - $definition->setArguments($arguments); + $definition->replaceArgument(2, new Reference('debug.controller_resolver')); + + // replace the regular event_dispatcher service with the debug one + $definition = $container->findDefinition('event_dispatcher'); + $definition->setPublic(false); + $container->setDefinition('debug.event_dispatcher.parent', $definition); + $container->setAlias('event_dispatcher', 'debug.event_dispatcher'); } $configuration = $this->getConfiguration($configs, $container); diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml index 7d10cc70b9..d05f98ab4b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml @@ -17,7 +17,7 @@ - + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/RegisterKernelListenersPassTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/RegisterKernelListenersPassTest.php index 670052fe1b..8414b8dc98 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/RegisterKernelListenersPassTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/RegisterKernelListenersPassTest.php @@ -78,6 +78,10 @@ class RegisterKernelListenersPassTest extends \PHPUnit_Framework_TestCase ->method('getDefinition') ->will($this->returnValue($definition)); + $builder->expects($this->atLeastOnce()) + ->method('findDefinition') + ->will($this->returnValue($definition)); + $registerListenersPass = new RegisterKernelListenersPass(); $registerListenersPass->process($builder); }