Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7e2f24f

Browse files
committed
bug #20207 [DependencyInjection] move tags from decorated to decorating service (xabbuh)
This PR was merged into the 2.7 branch. Discussion ---------- [DependencyInjection] move tags from decorated to decorating service | Q | A | ------------- | --- | Branch? | 2.7 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #20150 | License | MIT | Doc PR | Commits ------- 7def83c move tags from decorated to decorating service
2 parents f76e77f + 7def83c commit 7e2f24f

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ public function process(ContainerBuilder $container)
4242
$public = $alias->isPublic();
4343
$container->setAlias($renamedId, new Alias((string) $alias, false));
4444
} else {
45-
$definition = $container->getDefinition($inner);
46-
$public = $definition->isPublic();
47-
$definition->setPublic(false);
48-
$container->setDefinition($renamedId, $definition);
45+
$decoratedDefinition = $container->getDefinition($inner);
46+
$definition->setTags($decoratedDefinition->getTags(), $definition->getTags());
47+
$public = $decoratedDefinition->isPublic();
48+
$decoratedDefinition->setPublic(false);
49+
$decoratedDefinition->setTags(array());
50+
$container->setDefinition($renamedId, $decoratedDefinition);
4951
}
5052

5153
$container->setAlias($inner, new Alias($id, $public));

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,24 @@ public function testProcessWithAlias()
8282
$this->assertNull($fooExtendedDefinition->getDecoratedService());
8383
}
8484

85+
public function testProcessMovesTagsFromDecoratedDefinitionToDecoratingDefinition()
86+
{
87+
$container = new ContainerBuilder();
88+
$container
89+
->register('foo')
90+
->setTags(array('name' => 'bar'))
91+
;
92+
$container
93+
->register('baz')
94+
->setDecoratedService('foo')
95+
;
96+
97+
$this->process($container);
98+
99+
$this->assertEmpty($container->getDefinition('baz.inner')->getTags());
100+
$this->assertEquals(array('name' => 'bar'), $container->getDefinition('baz')->getTags());
101+
}
102+
85103
protected function process(ContainerBuilder $container)
86104
{
87105
$repeatedPass = new DecoratorServicePass();

0 commit comments

Comments
 (0)