[DependencyInjection] Add support for aliases of aliases + regression test
This commit is contained in:
parent
d8c0ef705c
commit
81b122dd7b
@ -855,7 +855,11 @@ EOF;
|
|||||||
$code = " \$this->aliases = array(\n";
|
$code = " \$this->aliases = array(\n";
|
||||||
ksort($aliases);
|
ksort($aliases);
|
||||||
foreach ($aliases as $alias => $id) {
|
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";
|
return $code . " );\n";
|
||||||
|
@ -15,6 +15,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
|
|||||||
use Symfony\Component\DependencyInjection\Parameter;
|
use Symfony\Component\DependencyInjection\Parameter;
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
use Symfony\Component\DependencyInjection\Definition;
|
use Symfony\Component\DependencyInjection\Definition;
|
||||||
|
use Symfony\Component\DependencyInjection\Alias;
|
||||||
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -182,10 +183,10 @@ class XmlDumper extends Dumper
|
|||||||
* Adds a service alias.
|
* Adds a service alias.
|
||||||
*
|
*
|
||||||
* @param string $alias
|
* @param string $alias
|
||||||
* @param string $id
|
* @param Alias $id
|
||||||
* @param \DOMElement $parent
|
* @param \DOMElement $parent
|
||||||
*/
|
*/
|
||||||
private function addServiceAlias($alias, $id, \DOMElement $parent)
|
private function addServiceAlias($alias, Alias $id, \DOMElement $parent)
|
||||||
{
|
{
|
||||||
$service = $this->document->createElement('service');
|
$service = $this->document->createElement('service');
|
||||||
$service->setAttribute('id', $alias);
|
$service->setAttribute('id', $alias);
|
||||||
@ -213,7 +214,11 @@ class XmlDumper extends Dumper
|
|||||||
$this->addService($definition, $id, $services);
|
$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);
|
$this->addServiceAlias($alias, $id, $services);
|
||||||
}
|
}
|
||||||
$parent->appendChild($services);
|
$parent->appendChild($services);
|
||||||
|
@ -182,7 +182,11 @@ class YamlDumper extends Dumper
|
|||||||
$code .= $this->addService($id, $definition);
|
$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);
|
$code .= $this->addServiceAlias($alias, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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()
|
public function testOverrideServiceWhenUsingADumpedContainer()
|
||||||
{
|
{
|
||||||
require_once self::$fixturesPath.'/php/services9.php';
|
require_once self::$fixturesPath.'/php/services9.php';
|
||||||
|
@ -43,6 +43,7 @@ $container->getParameterBag()->add(array(
|
|||||||
'foo' => 'bar',
|
'foo' => 'bar',
|
||||||
));
|
));
|
||||||
$container->setAlias('alias_for_foo', 'foo');
|
$container->setAlias('alias_for_foo', 'foo');
|
||||||
|
$container->setAlias('alias_for_alias', 'alias_for_foo');
|
||||||
$container->
|
$container->
|
||||||
register('method_call1', 'FooClass')->
|
register('method_call1', 'FooClass')->
|
||||||
setFile(realpath(__DIR__.'/../includes/foo.php'))->
|
setFile(realpath(__DIR__.'/../includes/foo.php'))->
|
||||||
|
@ -38,6 +38,7 @@ class ProjectServiceContainer extends Container
|
|||||||
'request' => 'getRequestService',
|
'request' => 'getRequestService',
|
||||||
);
|
);
|
||||||
$this->aliases = array(
|
$this->aliases = array(
|
||||||
|
'alias_for_alias' => 'foo',
|
||||||
'alias_for_foo' => 'foo',
|
'alias_for_foo' => 'foo',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ class ProjectServiceContainer extends Container
|
|||||||
'request' => 'getRequestService',
|
'request' => 'getRequestService',
|
||||||
);
|
);
|
||||||
$this->aliases = array(
|
$this->aliases = array(
|
||||||
|
'alias_for_alias' => 'foo',
|
||||||
'alias_for_foo' => 'foo',
|
'alias_for_foo' => 'foo',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -74,5 +74,6 @@
|
|||||||
</call>
|
</call>
|
||||||
</service>
|
</service>
|
||||||
<service id="alias_for_foo" alias="foo"/>
|
<service id="alias_for_foo" alias="foo"/>
|
||||||
|
<service id="alias_for_alias" alias="foo"/>
|
||||||
</services>
|
</services>
|
||||||
</container>
|
</container>
|
||||||
|
@ -69,3 +69,4 @@ services:
|
|||||||
- [setRequest, ['@?request']]
|
- [setRequest, ['@?request']]
|
||||||
|
|
||||||
alias_for_foo: @foo
|
alias_for_foo: @foo
|
||||||
|
alias_for_alias: @foo
|
||||||
|
Reference in New Issue
Block a user