You are here

class MergeExtensionConfigurationPass in Service Container 7

Same name and namespace in other branches
  1. 7.2 modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php \Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass

Merges extension configs into the container builder.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

Expanded class hierarchy of MergeExtensionConfigurationPass

1 file declares its use of MergeExtensionConfigurationPass
MergeExtensionConfigurationPassTest.php in modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php

File

modules/providers/service_container_symfony/lib/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php, line 22

Namespace

Symfony\Component\DependencyInjection\Compiler
View source
class MergeExtensionConfigurationPass implements CompilerPassInterface {

  /**
   * {@inheritdoc}
   */
  public function process(ContainerBuilder $container) {
    $parameters = $container
      ->getParameterBag()
      ->all();
    $definitions = $container
      ->getDefinitions();
    $aliases = $container
      ->getAliases();
    $exprLangProviders = $container
      ->getExpressionLanguageProviders();
    foreach ($container
      ->getExtensions() as $extension) {
      if ($extension instanceof PrependExtensionInterface) {
        $extension
          ->prepend($container);
      }
    }
    foreach ($container
      ->getExtensions() as $name => $extension) {
      if (!($config = $container
        ->getExtensionConfig($name))) {

        // this extension was not called
        continue;
      }
      $config = $container
        ->getParameterBag()
        ->resolveValue($config);
      $tmpContainer = new ContainerBuilder($container
        ->getParameterBag());
      $tmpContainer
        ->setResourceTracking($container
        ->isTrackingResources());
      $tmpContainer
        ->addObjectResource($extension);
      foreach ($exprLangProviders as $provider) {
        $tmpContainer
          ->addExpressionLanguageProvider($provider);
      }
      $extension
        ->load($config, $tmpContainer);
      $container
        ->merge($tmpContainer);
      $container
        ->getParameterBag()
        ->add($parameters);
    }
    $container
      ->addDefinitions($definitions);
    $container
      ->addAliases($aliases);
  }

}

Members

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