diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
index c1c8da193f..0c622747cc 100644
--- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
+++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
@@ -855,7 +855,11 @@ EOF;
$code = " \$this->aliases = array(\n";
ksort($aliases);
foreach ($aliases as $alias => $id) {
- $code .= ' '.var_export($alias, true).' => '.var_export((string) $id, true).",\n";
+ $id = (string) $id;
+ while (isset($aliases[$id])) {
+ $id = (string) $aliases[$id];
+ }
+ $code .= ' '.var_export($alias, true).' => '.var_export($id, true).",\n";
}
return $code . " );\n";
diff --git a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
index a5ceb2c68d..a311af348e 100644
--- a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
+++ b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
@@ -15,6 +15,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Parameter;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\DependencyInjection\Definition;
+use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
/**
@@ -182,10 +183,10 @@ class XmlDumper extends Dumper
* Adds a service alias.
*
* @param string $alias
- * @param string $id
+ * @param Alias $id
* @param \DOMElement $parent
*/
- private function addServiceAlias($alias, $id, \DOMElement $parent)
+ private function addServiceAlias($alias, Alias $id, \DOMElement $parent)
{
$service = $this->document->createElement('service');
$service->setAttribute('id', $alias);
@@ -213,7 +214,11 @@ class XmlDumper extends Dumper
$this->addService($definition, $id, $services);
}
- foreach ($this->container->getAliases() as $alias => $id) {
+ $aliases = $this->container->getAliases();
+ foreach ($aliases as $alias => $id) {
+ while (isset($aliases[(string) $id])) {
+ $id = $aliases[(string) $id];
+ }
$this->addServiceAlias($alias, $id, $services);
}
$parent->appendChild($services);
diff --git a/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
index 0059f0d0d7..807e656283 100644
--- a/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
+++ b/src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php
@@ -182,7 +182,11 @@ class YamlDumper extends Dumper
$code .= $this->addService($id, $definition);
}
- foreach ($this->container->getAliases() as $alias => $id) {
+ $aliases = $this->container->getAliases();
+ foreach ($aliases as $alias => $id) {
+ while (isset($aliases[(string) $id])) {
+ $id = $aliases[(string) $id];
+ }
$code .= $this->addServiceAlias($alias, $id);
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php b/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
index 72d587ff07..0ea42d473b 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
@@ -120,6 +120,20 @@ class PhpDumperTest extends \PHPUnit_Framework_TestCase
}
}
+ public function testAliases()
+ {
+ $container = include self::$fixturesPath.'/containers/container9.php';
+ $container->compile();
+ $dumper = new PhpDumper($container);
+ eval('?>'.$dumper->dump(array('class' => 'Symfony_DI_PhpDumper_Test_Aliases')));
+
+ $container = new \Symfony_DI_PhpDumper_Test_Aliases();
+ $container->set('foo', $foo = new \stdClass);
+ $this->assertSame($foo, $container->get('foo'));
+ $this->assertSame($foo, $container->get('alias_for_foo'));
+ $this->assertSame($foo, $container->get('alias_for_alias'));
+ }
+
public function testOverrideServiceWhenUsingADumpedContainer()
{
require_once self::$fixturesPath.'/php/services9.php';
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php
index 6ba3ad349d..6abe5e2a91 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php
@@ -43,6 +43,7 @@ $container->getParameterBag()->add(array(
'foo' => 'bar',
));
$container->setAlias('alias_for_foo', 'foo');
+$container->setAlias('alias_for_alias', 'alias_for_foo');
$container->
register('method_call1', 'FooClass')->
setFile(realpath(__DIR__.'/../includes/foo.php'))->
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
index 5929351e43..9361a0e87c 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
@@ -38,6 +38,7 @@ class ProjectServiceContainer extends Container
'request' => 'getRequestService',
);
$this->aliases = array(
+ 'alias_for_alias' => 'foo',
'alias_for_foo' => 'foo',
);
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php
index 4170ad1f30..b60cbff8e8 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php
@@ -46,6 +46,7 @@ class ProjectServiceContainer extends Container
'request' => 'getRequestService',
);
$this->aliases = array(
+ 'alias_for_alias' => 'foo',
'alias_for_foo' => 'foo',
);
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml
index d04d492e8d..cb3a1f69de 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services9.xml
@@ -74,5 +74,6 @@
+
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml
index 46c3edfca4..6a4c3d5d97 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services9.yml
@@ -69,3 +69,4 @@ services:
- [setRequest, ['@?request']]
alias_for_foo: @foo
+ alias_for_alias: @foo