From 38c4b29555f7ad387bfa298e3ccb0303be8fd0b5 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 2 Feb 2010 11:45:21 +0100 Subject: [PATCH] [DependencyInjection] fixed Builder when trying to override an alias with a definition or the other way around --- .../DependencyInjection/Builder.php | 31 +++++++++++++++++-- .../BuilderConfiguration.php | 2 ++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Components/DependencyInjection/Builder.php b/src/Symfony/Components/DependencyInjection/Builder.php index fdcf14df07..5b197bc012 100644 --- a/src/Symfony/Components/DependencyInjection/Builder.php +++ b/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; } diff --git a/src/Symfony/Components/DependencyInjection/BuilderConfiguration.php b/src/Symfony/Components/DependencyInjection/BuilderConfiguration.php index c345be2ec9..653198e6bc 100644 --- a/src/Symfony/Components/DependencyInjection/BuilderConfiguration.php +++ b/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; }