You are here

public function DecoratorServicePass::process in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php \Symfony\Component\DependencyInjection\Compiler\DecoratorServicePass::process()

You can modify the container here before it is dumped to PHP code.

Parameters

ContainerBuilder $container:

Overrides CompilerPassInterface::process

File

vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php, line 25

Class

DecoratorServicePass
Overwrites a service but keeps the overridden one.

Namespace

Symfony\Component\DependencyInjection\Compiler

Code

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));
  }
}