Bladeren bron

[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
Jeremy Mikola 14 jaren geleden
bovenliggende
commit
554c86c589

+ 42 - 7
src/Symfony/Component/DependencyInjection/ContainerBuilder.php

@@ -443,13 +443,11 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
         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 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
         $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 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
         });
     }
 
+    /**
+     * 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;

+ 7 - 4
tests/Symfony/Tests/Component/DependencyInjection/ContainerBuilderTest.php

@@ -409,20 +409,23 @@ class ContainerBuilderTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @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');