From 7ba430caf8ae41742e71092e464ab06952ea6ef4 Mon Sep 17 00:00:00 2001 From: HypeMC Date: Tue, 13 Aug 2024 19:38:01 +0200 Subject: [PATCH] [DependencyInjection] Add `ContainerBuilder::registerChild()` shortcut method --- .../Component/DependencyInjection/CHANGELOG.md | 1 + .../DependencyInjection/ContainerBuilder.php | 9 +++++++++ .../Tests/ContainerBuilderTest.php | 14 ++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/CHANGELOG.md b/src/Symfony/Component/DependencyInjection/CHANGELOG.md index f7038a59b5653..3855313ccb8e8 100644 --- a/src/Symfony/Component/DependencyInjection/CHANGELOG.md +++ b/src/Symfony/Component/DependencyInjection/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Deprecate `!tagged` tag, use `!tagged_iterator` instead + * Add a `ContainerBuilder::registerChild()` shortcut method for registering child definitions 7.1 --- diff --git a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php index ee042fcc72328..b4477df4757f3 100644 --- a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php +++ b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php @@ -937,6 +937,15 @@ public function register(string $id, ?string $class = null): Definition return $this->setDefinition($id, new Definition($class)); } + /** + * This method provides a fluid interface for easily registering a child + * service definition of the given parent service. + */ + public function registerChild(string $id, string $parent): ChildDefinition + { + return $this->setDefinition($id, new ChildDefinition($parent)); + } + /** * Registers an autowired service definition. * diff --git a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php index 612ee1112feed..5feaa3d19a83b 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php @@ -212,8 +212,18 @@ public function testRegister() { $builder = new ContainerBuilder(); $builder->register('foo', 'Bar\FooClass'); - $this->assertTrue($builder->hasDefinition('foo'), '->register() registers a new service definition'); - $this->assertInstanceOf(Definition::class, $builder->getDefinition('foo'), '->register() returns the newly created Definition instance'); + $this->assertTrue($builder->hasDefinition('foo'), '->hasDefinition() returns true if a service definition exists'); + $this->assertInstanceOf(Definition::class, $builder->getDefinition('foo'), '->getDefinition() returns an instance of Definition'); + } + + public function testRegisterChild() + { + $builder = new ContainerBuilder(); + $builder->register('foo', 'Bar\FooClass'); + $builder->registerChild('bar', 'foo'); + $this->assertTrue($builder->hasDefinition('bar'), '->hasDefinition() returns true if a service definition exists'); + $this->assertInstanceOf(ChildDefinition::class, $definition = $builder->getDefinition('bar'), '->getDefinition() returns an instance of Definition'); + $this->assertSame('foo', $definition->getParent(), '->getParent() returns the id of the parent service'); } public function testAutowire()