class MergeExtensionConfigurationParameterBag
@internal
Hierarchy
- class \Symfony\Component\DependencyInjection\ParameterBag\ParameterBag implements \Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface
- class \Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag extends \Symfony\Component\DependencyInjection\ParameterBag\ParameterBag
- class \Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationParameterBag extends \Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag
- class \Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag extends \Symfony\Component\DependencyInjection\ParameterBag\ParameterBag
Expanded class hierarchy of MergeExtensionConfigurationParameterBag
File
-
vendor/
symfony/ dependency-injection/ Compiler/ MergeExtensionConfigurationPass.php, line 107
Namespace
Symfony\Component\DependencyInjection\CompilerView source
class MergeExtensionConfigurationParameterBag extends EnvPlaceholderParameterBag {
private array $processedEnvPlaceholders;
public function __construct(parent $parameterBag) {
parent::__construct($parameterBag->all());
$this->mergeEnvPlaceholders($parameterBag);
}
public function freezeAfterProcessing(Extension $extension, ContainerBuilder $container) : void {
if (!($config = $extension->getProcessedConfigs())) {
// Extension::processConfiguration() wasn't called, we cannot know how configs were merged
return;
}
$this->processedEnvPlaceholders = [];
// serialize config and container to catch env vars nested in object graphs
$config = serialize($config) . serialize($container->getDefinitions()) . serialize($container->getAliases()) . serialize($container->getParameterBag()
->all());
if (false === stripos($config, 'env_')) {
return;
}
preg_match_all('/env_[a-f0-9]{16}_\\w+_[a-f0-9]{32}/Ui', $config, $matches);
$usedPlaceholders = array_flip($matches[0]);
foreach (parent::getEnvPlaceholders() as $env => $placeholders) {
foreach ($placeholders as $placeholder) {
if (isset($usedPlaceholders[$placeholder])) {
$this->processedEnvPlaceholders[$env] = $placeholders;
break;
}
}
}
}
public function getEnvPlaceholders() : array {
return $this->processedEnvPlaceholders ?? parent::getEnvPlaceholders();
}
public function getUnusedEnvPlaceholders() : array {
return !isset($this->processedEnvPlaceholders) ? [] : array_diff_key(parent::getEnvPlaceholders(), $this->processedEnvPlaceholders);
}
}