You are here

class DecoratorServicePass 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

Overwrites a service but keeps the overridden one.

@author Christophe Coevoet <stof@notk.org> @author Fabien Potencier <fabien@symfony.com>

Hierarchy

Expanded class hierarchy of DecoratorServicePass

1 file declares its use of DecoratorServicePass
DecoratorServicePassTest.php in vendor/symfony/dependency-injection/Tests/Compiler/DecoratorServicePassTest.php

File

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

Namespace

Symfony\Component\DependencyInjection\Compiler
View 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

Namesort descending Modifiers Type Description Overrides
DecoratorServicePass::process public function You can modify the container here before it is dumped to PHP code. Overrides CompilerPassInterface::process