class MergeExtensionConfigurationPass
Same name in this branch
- 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\CompilerView 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 |