Skip to content

Commit 4665128

Browse files
author
Hugo Hamon
committed
[DependencyInjection] run the ResolveDefinitionTemplatesPass compiler pass very early first to support inherited tags in services definitions.
1 parent c3230f0 commit 4665128

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function __construct()
4242
$this->beforeOptimizationPasses = array(
4343
100 => array(
4444
$resolveClassPass = new ResolveClassPass(),
45+
new ResolveDefinitionTemplatesPass(),
4546
),
4647
);
4748

src/Symfony/Component/DependencyInjection/Tests/Compiler/PassConfigTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function testPassOrdering()
3030
$config->addPass($pass2, PassConfig::TYPE_BEFORE_OPTIMIZATION, 30);
3131

3232
$passes = $config->getBeforeOptimizationPasses();
33-
$this->assertSame($pass2, $passes[1]);
34-
$this->assertSame($pass1, $passes[2]);
33+
$this->assertSame($pass2, $passes[2]);
34+
$this->assertSame($pass1, $passes[3]);
3535
}
3636
}

src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveDefinitionTemplatesPassTest.php

+32
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,38 @@ public function testProcessResolvesAliases()
363363
$this->assertSame('ParentClass', $def->getClass());
364364
}
365365

366+
public function testProcessInheritTags()
367+
{
368+
$container = new ContainerBuilder();
369+
370+
$container->register('parent', 'ParentClass')->addTag('some.tag', array('foo' => 'bar'));
371+
372+
$definition = (new ChildDefinition('parent'))
373+
->setInheritTags(true)
374+
->addTag('other.tag')
375+
->addTag('some.tag', array('bar' => 'foo'));
376+
377+
$container->setDefinition('child', $definition);
378+
379+
$this->process($container);
380+
381+
$definition = $container->getDefinition('child');
382+
$this->assertSame('ParentClass', $definition->getClass());
383+
$this->assertCount(2, $definition->getTags());
384+
$this->assertSame(
385+
array(
386+
'other.tag' => array(
387+
array(),
388+
),
389+
'some.tag' => array(
390+
array('bar' => 'foo'),
391+
array('foo' => 'bar'),
392+
),
393+
),
394+
$definition->getTags()
395+
);
396+
}
397+
366398
protected function process(ContainerBuilder $container)
367399
{
368400
$pass = new ResolveDefinitionTemplatesPass();

0 commit comments

Comments
 (0)