浏览代码

[DependencyInjection] fixed Builder when trying to override an alias with a definition or the other way around

Fabien Potencier 15 年之前
父节点
当前提交
38c4b29555

+ 29 - 2
src/Symfony/Components/DependencyInjection/Builder.php

@@ -32,6 +32,7 @@ class Builder extends Container
    */
   public function setService($id, $service)
   {
+    unset($this->definitions[$id]);
     unset($this->aliases[$id]);
 
     parent::setService($id, $service);
@@ -136,8 +137,8 @@ class Builder extends Container
       return;
     }
 
-    $this->aliases = array_merge($this->aliases, $configuration->getAliases());
-    $this->definitions = array_merge($this->definitions, $configuration->getDefinitions());
+    $this->addDefinitions($configuration->getDefinitions());
+    $this->addAliases($configuration->getAliases());
 
     $currentParameters = $this->getParameters();
     foreach ($configuration->getParameters() as $key => $value)
@@ -162,6 +163,30 @@ class Builder extends Container
     return array_unique(array_merge(array_keys($this->getDefinitions()), array_keys($this->aliases), parent::getServiceIds()));
   }
 
+  /**
+   * Adds the service aliases.
+   *
+   * @param array $aliases An array of aliases
+   */
+  public function addAliases(array $aliases)
+  {
+    foreach ($aliases as $alias => $id)
+    {
+      $this->setAlias($alias, $id);
+    }
+  }
+
+  /**
+   * Sets the service aliases.
+   *
+   * @param array $definitions An array of service definitions
+   */
+  public function setAliases(array $aliases)
+  {
+    $this->aliases = array();
+    $this->addAliases($aliases);
+  }
+
   /**
    * Sets an alias for an existing service.
    *
@@ -170,6 +195,8 @@ class Builder extends Container
    */
   public function setAlias($alias, $id)
   {
+    unset($this->definitions[$alias]);
+
     $this->aliases[$alias] = $id;
   }
 

+ 2 - 0
src/Symfony/Components/DependencyInjection/BuilderConfiguration.php

@@ -157,6 +157,8 @@ class BuilderConfiguration
    */
   public function setAlias($alias, $id)
   {
+    unset($this->definitions[$alias]);
+
     $this->aliases[$alias] = $id;
   }