class DecoratorServicePass in Service Container 7.2
Same name and namespace in other branches
- 7 modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php \Symfony\Component\DependencyInjection\Compiler\DecoratorServicePass
Overwrites a service but keeps the overridden one.
@author Christophe Coevoet <stof@notk.org> @author Fabien Potencier <fabien@symfony.com>
Hierarchy
- class \Symfony\Component\DependencyInjection\Compiler\DecoratorServicePass implements CompilerPassInterface
Expanded class hierarchy of DecoratorServicePass
1 file declares its use of DecoratorServicePass
- DecoratorServicePassTest.php in modules/
providers/ service_container_symfony/ lib/ Symfony/ Component/ DependencyInjection/ Tests/ Compiler/ DecoratorServicePassTest.php
File
- modules/
providers/ service_container_symfony/ lib/ Symfony/ Component/ DependencyInjection/ Compiler/ DecoratorServicePass.php, line 23
Namespace
Symfony\Component\DependencyInjection\CompilerView source
class DecoratorServicePass implements CompilerPassInterface {
public function process(ContainerBuilder $container) {
foreach ($container
->getDefinitions() as $id => $definition) {
if (!($decorated = $definition
->getDecoratedService())) {
continue;
}
$definition
->setDecoratedService(null);
list($inner, $renamedId) = $decorated;
if (!$renamedId) {
$renamedId = $id . '.inner';
}
// we create a new alias/service for the service we are replacing
// to be able to reference it in the new one
if ($container
->hasAlias($inner)) {
$alias = $container
->getAlias($inner);
$public = $alias
->isPublic();
$container
->setAlias($renamedId, new Alias((string) $alias, false));
}
else {
$definition = $container
->getDefinition($inner);
$public = $definition
->isPublic();
$definition
->setPublic(false);
$container
->setDefinition($renamedId, $definition);
}
$container
->setAlias($inner, new Alias($id, $public));
}
}
}
Members
Name![]() |
Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DecoratorServicePass:: |
public | function |
You can modify the container here before it is dumped to PHP code. Overrides CompilerPassInterface:: |