replace alias in factory services

This commit is contained in:
Christian Flothmann 2016-02-20 20:14:11 +01:00
parent 66fb0bd43d
commit 56f87982d8
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());
}
/**