[FrameworkBundle] made sure that the debug event dispatcher is used everywhere

This commit is contained in:
Fabien Potencier 2013-09-15 20:39:31 +02:00
parent 6ec2cbaa6c
commit f65a526e7d
4 changed files with 14 additions and 8 deletions

View File

@ -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) {

View File

@ -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);

View File

@ -17,7 +17,7 @@
<service id="debug.event_dispatcher" class="%debug.event_dispatcher.class%">
<tag name="monolog.logger" channel="event" />
<argument type="service" id="event_dispatcher" />
<argument type="service" id="debug.event_dispatcher.parent" />
<argument type="service" id="debug.stopwatch" />
<argument type="service" id="logger" on-invalid="null" />
<call method="setProfiler"><argument type="service" id="profiler" on-invalid="null" /></call>

View File

@ -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);
}