From 554c86c5895f9ef3e48d6da3d4155b2fd763332d Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Thu, 6 Jan 2011 15:44:59 -0500 Subject: [PATCH] [DependencyInjection] Add hasInterfaceInjectorForClass(), which is helpful for extension loader methods Additionally, doc blocks were added for the Container's InterfaceInjector methods, and the test case was modified to cover both add() methods --- .../DependencyInjection/ContainerBuilder.php | 49 ++++++++++++++++--- .../ContainerBuilderTest.php | 11 +++-- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php index c54c2be4eb09..d938847ece53 100644 --- a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php +++ b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php @@ -443,13 +443,11 @@ public function getAlias($id) return $this->aliases[$id]; } - public function addInterfaceInjectors(array $injectors) - { - foreach ($injectors as $injector) { - $this->addInterfaceInjector($injector); - } - } - + /** + * Adds an InterfaceInjector. + * + * @param InterfaceInjector $injector + */ public function addInterfaceInjector(InterfaceInjector $injector) { $class = $injector->getClass(); @@ -460,6 +458,26 @@ public function addInterfaceInjector(InterfaceInjector $injector) $this->injectors[$class] = $injector; } + /** + * Adds multiple InterfaceInjectors. + * + * @param array $injectors An array of InterfaceInjectors + */ + public function addInterfaceInjectors(array $injectors) + { + foreach ($injectors as $injector) { + $this->addInterfaceInjector($injector); + } + } + + /** + * Gets defined InterfaceInjectors. If a service is provided, only that + * support the service will be returned. + * + * @param string $service If provided, only injectors supporting this service will be returned + * + * @return array An array of InterfaceInjectors + */ public function getInterfaceInjectors($service = null) { if (null === $service) { @@ -471,6 +489,23 @@ public function getInterfaceInjectors($service = null) }); } + /** + * Returns true if an InterfaceInjector is defined for the class. + * + * @param string $class The class + * + * @return boolean true if at least one InterfaceInjector is defined, false otherwise + */ + public function hasInterfaceInjectorForClass($class) + { + return array_key_exists($class, $this->injectors); + } + + /** + * Sets the defined InterfaceInjectors. + * + * @param array $injectors An array of InterfaceInjectors indexed by class names + */ public function setInterfaceInjectors(array $injectors) { $this->injectors = $injectors; diff --git a/tests/Symfony/Tests/Component/DependencyInjection/ContainerBuilderTest.php b/tests/Symfony/Tests/Component/DependencyInjection/ContainerBuilderTest.php index 7f4f458e9462..ccea24386064 100644 --- a/tests/Symfony/Tests/Component/DependencyInjection/ContainerBuilderTest.php +++ b/tests/Symfony/Tests/Component/DependencyInjection/ContainerBuilderTest.php @@ -409,20 +409,23 @@ public function testExtension() /** * @covers Symfony\Component\DependencyInjection\ContainerBuilder::addInterfaceInjector + * @covers Symfony\Component\DependencyInjection\ContainerBuilder::addInterfaceInjectors * @covers Symfony\Component\DependencyInjection\ContainerBuilder::getInterfaceInjectors + * @covers Symfony\Component\DependencyInjection\ContainerBuilder::hasInterfaceInjectorForClass * @covers Symfony\Component\DependencyInjection\ContainerBuilder::setDefinition */ public function testInterfaceInjection() { $definition = new Definition('Symfony\Tests\Component\DependencyInjection\FooClass'); - $injector = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 1); - $injector2 = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 0); + $injectors[] = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 1); + $injectors[] = $this->getMockInterfaceInjector('Symfony\Tests\Component\DependencyInjection\FooClass', 0); $container = new ContainerBuilder(); - $container->addInterfaceInjector($injector); - $container->addInterfaceInjector($injector2); + $container->addInterfaceInjectors($injectors); $this->assertEquals(1, count($container->getInterfaceInjectors('Symfony\Tests\Component\DependencyInjection\FooClass'))); + $this->assertTrue($container->hasInterfaceInjectorForClass('Symfony\Tests\Component\DependencyInjection\FooClass')); + $this->assertFalse($container->hasInterfaceInjectorForClass('\Foo')); $container->setDefinition('test', $definition); $test = $container->get('test');