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

Skip to content

Commit 0725a16

Browse files
bug #49334 [DependencyInjection] keep proxy tag on original definition when decorating (kbond)
This PR was merged into the 5.4 branch. Discussion ---------- [DependencyInjection] keep `proxy` tag on original definition when decorating | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #49333 | License | MIT | Doc PR | n/a This allows you to decorate lazy services using interface proxying. Commits ------- cc11922 [DI] keep `proxy` tag on original definition when decorating
2 parents 813ba97 + cc11922 commit 0725a16

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function process(ContainerBuilder $container)
5353

5454
$tagsToKeep = $container->hasParameter('container.behavior_describing_tags')
5555
? $container->getParameter('container.behavior_describing_tags')
56-
: ['container.do_not_inline', 'container.service_locator', 'container.service_subscriber', 'container.service_subscriber.locator'];
56+
: ['proxy', 'container.do_not_inline', 'container.service_locator', 'container.service_subscriber', 'container.service_subscriber.locator'];
5757

5858
foreach ($definitions as [$id, $definition]) {
5959
$decoratedService = $definition->getDecoratedService();

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,25 @@ public function testProcessLeavesServiceSubscriberTagOnOriginalDefinition()
262262
$this->assertEquals(['bar' => ['attr' => 'baz'], 'foobar' => ['attr' => 'bar']], $container->getDefinition('baz')->getTags());
263263
}
264264

265+
public function testProcessLeavesProxyTagOnOriginalDefinition()
266+
{
267+
$container = new ContainerBuilder();
268+
$container
269+
->register('foo')
270+
->setTags(['proxy' => 'foo', 'bar' => ['attr' => 'baz']])
271+
;
272+
$container
273+
->register('baz')
274+
->setTags(['foobar' => ['attr' => 'bar']])
275+
->setDecoratedService('foo')
276+
;
277+
278+
$this->process($container);
279+
280+
$this->assertEquals(['proxy' => 'foo'], $container->getDefinition('baz.inner')->getTags());
281+
$this->assertEquals(['bar' => ['attr' => 'baz'], 'foobar' => ['attr' => 'bar']], $container->getDefinition('baz')->getTags());
282+
}
283+
265284
public function testCannotDecorateSyntheticService()
266285
{
267286
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)