[DI] Resolve aliases earlier

This commit is contained in:
Nicolas Grekas 2017-07-17 22:28:29 +02:00
parent 559ccb2c66
commit 9922827cc2
2 changed files with 11 additions and 11 deletions

View File

@ -249,9 +249,6 @@ class Container implements IntrospectableContainerInterface
// this method can be called thousands of times during a request, avoid
// calling strtolower() unless necessary.
for ($i = 2;;) {
if ('service_container' === $id) {
return $this;
}
if (isset($this->aliases[$id])) {
$id = $this->aliases[$id];
}
@ -259,6 +256,9 @@ class Container implements IntrospectableContainerInterface
if (isset($this->services[$id]) || array_key_exists($id, $this->services)) {
return $this->services[$id];
}
if ('service_container' === $id) {
return $this;
}
if (isset($this->loading[$id])) {
throw new ServiceCircularReferenceException($id, array_keys($this->loading));
@ -328,16 +328,16 @@ class Container implements IntrospectableContainerInterface
{
$id = strtolower($id);
if (isset($this->aliases[$id])) {
$id = $this->aliases[$id];
}
if ('service_container' === $id) {
// BC: 'service_container' was a synthetic service previously.
// @todo Change to false in next major release.
return true;
}
if (isset($this->aliases[$id])) {
$id = $this->aliases[$id];
}
return isset($this->services[$id]) || array_key_exists($id, $this->services);
}

View File

@ -1482,6 +1482,10 @@ EOF;
*/
private function getServiceCall($id, Reference $reference = null)
{
while ($this->container->hasAlias($id)) {
$id = (string) $this->container->getAlias($id);
}
if ('service_container' === $id) {
return '$this';
}
@ -1490,10 +1494,6 @@ EOF;
return sprintf('$this->get(\'%s\', ContainerInterface::NULL_ON_INVALID_REFERENCE)', $id);
}
if ($this->container->hasAlias($id)) {
$id = (string) $this->container->getAlias($id);
}
return sprintf('$this->get(\'%s\')', $id);
}