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

Breadcrumb

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

function MergeExtensionConfigurationPass::process

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

Overrides CompilerPassInterface::process

2 calls to MergeExtensionConfigurationPass::process()
MergeExtensionConfigurationPass::process in vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php
You can modify the container here before it is dumped to PHP code.
MergeExtensionConfigurationPass::process in vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php
You can modify the container here before it is dumped to PHP code.
1 method overrides MergeExtensionConfigurationPass::process()
MergeExtensionConfigurationPass::process in vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php
You can modify the container here before it is dumped to PHP code.

File

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

Class

MergeExtensionConfigurationPass
Merges extension configs into the container builder.

Namespace

Symfony\Component\DependencyInjection\Compiler

Code

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);
}
RSS feed
Powered by Drupal