Sfoglia il codice sorgente

[DependencyInjection] fixes a bug when requesting a definition that uses property injection

Johannes Schmitt 14 anni fa
parent
commit
2c287676fb

+ 14 - 0
src/Symfony/Component/DependencyInjection/ContainerBuilder.php

@@ -698,6 +698,20 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
             }
         }
 
+        $properties = $this->resolveServices($this->getParameterBag()->resolveValue($definition->getProperties()));
+        $outsideClass = new \ReflectionClass($service);
+        foreach ($properties as $name => $value) {
+            $class = $outsideClass;
+            do {
+                if ($class->hasProperty($name)) {
+                    $property = $class->getProperty($name);
+                    $property->setAccessible(true);
+                    $property->setValue($service, $value);
+                    continue 2;
+                }
+            } while (false !== $class = $class->getParentClass());
+        }
+
         if ($callable = $definition->getConfigurator()) {
             if (is_array($callable) && is_object($callable[0]) && $callable[0] instanceof Reference) {
                 $callable[0] = $this->get((string) $callable[0]);