Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. MergeExtensionConfigurationPass.php

class MergeExtensionConfigurationPass

Same name in this branch
  1. 11.1.x vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php \Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass

Merges extension configs into the container builder.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

  • class \Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass implements \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface

Expanded class hierarchy of MergeExtensionConfigurationPass

1 file declares its use of MergeExtensionConfigurationPass
MergeExtensionConfigurationPass.php in vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php

File

vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php, line 31

Namespace

Symfony\Component\DependencyInjection\Compiler
View source
class MergeExtensionConfigurationPass implements CompilerPassInterface {
    public function process(ContainerBuilder $container) : void {
        $parameters = $container->getParameterBag()
            ->all();
        $definitions = $container->getDefinitions();
        $aliases = $container->getAliases();
        $exprLangProviders = $container->getExpressionLanguageProviders();
        $configAvailable = class_exists(BaseNode::class);
        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;
            }
            $resolvingBag = $container->getParameterBag();
            if ($resolvingBag instanceof EnvPlaceholderParameterBag && $extension instanceof Extension) {
                // create a dedicated bag so that we can track env vars per-extension
                $resolvingBag = new MergeExtensionConfigurationParameterBag($resolvingBag);
                if ($configAvailable) {
                    BaseNode::setPlaceholderUniquePrefix($resolvingBag->getEnvPlaceholderUniquePrefix());
                }
            }
            try {
                $config = $resolvingBag->resolveValue($config);
            } catch (ParameterNotFoundException $e) {
                $e->setSourceExtensionName($name);
                throw $e;
            }
            try {
                $tmpContainer = new MergeExtensionConfigurationContainerBuilder($extension, $resolvingBag);
                $tmpContainer->setResourceTracking($container->isTrackingResources());
                $tmpContainer->addObjectResource($extension);
                if ($extension instanceof ConfigurationExtensionInterface && null !== ($configuration = $extension->getConfiguration($config, $tmpContainer))) {
                    $tmpContainer->addObjectResource($configuration);
                }
                foreach ($exprLangProviders as $provider) {
                    $tmpContainer->addExpressionLanguageProvider($provider);
                }
                $extension->load($config, $tmpContainer);
            } catch (\Exception $e) {
                if ($resolvingBag instanceof MergeExtensionConfigurationParameterBag) {
                    $container->getParameterBag()
                        ->mergeEnvPlaceholders($resolvingBag);
                }
                throw $e;
            }
            if ($resolvingBag instanceof MergeExtensionConfigurationParameterBag) {
                // don't keep track of env vars that are *overridden* when configs are merged
                $resolvingBag->freezeAfterProcessing($extension, $tmpContainer);
            }
            $container->merge($tmpContainer);
            $container->getParameterBag()
                ->add($parameters);
        }
        $container->addDefinitions($definitions);
        $container->addAliases($aliases);
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
MergeExtensionConfigurationPass::process public function You can modify the container here before it is dumped to PHP code. Overrides CompilerPassInterface::process 1
RSS feed
Powered by Drupal