bug #17867 [DependencyInjection] replace alias in factory services (xabbuh)

This PR was merged into the 2.3 branch.

Discussion
----------

[DependencyInjection] replace alias in factory services

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #17864
| License       | MIT
| Doc PR        |

Commits
-------

56f8798 replace alias in factory services
This commit is contained in:
Fabien Potencier 2016-02-23 19:17:24 +01:00
commit 4b33fd3d45
2 changed files with 15 additions and 1 deletions

View File

@ -95,6 +95,8 @@ class ReplaceAliasByActualDefinitionPass implements CompilerPassInterface
$definition->setProperties(
$this->updateArgumentReferences($definition->getProperties(), $currentId, $newId)
);
$definition->setFactoryService($this->updateFactoryServiceReference($definition->getFactoryService(), $currentId, $newId));
}
}
@ -122,4 +124,13 @@ class ReplaceAliasByActualDefinitionPass implements CompilerPassInterface
return $arguments;
}
private function updateFactoryServiceReference($factoryService, $currentId, $newId)
{
if (null === $factoryService) {
return;
}
return $currentId === $factoryService ? $newId : $currentId;
}
}

View File

@ -21,7 +21,9 @@ class ReplaceAliasByActualDefinitionPassTest extends \PHPUnit_Framework_TestCase
{
$container = new ContainerBuilder();
$container->register('a', '\stdClass');
$aDefinition = $container->register('a', '\stdClass');
$aDefinition->setFactoryService('b');
$aDefinition->setFactoryMethod('createA');
$bDefinition = new Definition('\stdClass');
$bDefinition->setPublic(false);
@ -39,6 +41,7 @@ class ReplaceAliasByActualDefinitionPassTest extends \PHPUnit_Framework_TestCase
$container->has('b_alias') && !$container->hasAlias('b_alias'),
'->process() replaces alias to actual.'
);
$this->assertSame('b_alias', $aDefinition->getFactoryService());
}
/**