class ValidateEnvPlaceholdersPass
Validates environment variable placeholders used in extension configuration with dummy values.
@author Roland Franssen <franssen.roland@gmail.com>
Hierarchy
- class \Symfony\Component\DependencyInjection\Compiler\ValidateEnvPlaceholdersPass implements \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface
Expanded class hierarchy of ValidateEnvPlaceholdersPass
File
-
vendor/
symfony/ dependency-injection/ Compiler/ ValidateEnvPlaceholdersPass.php, line 27
Namespace
Symfony\Component\DependencyInjection\CompilerView source
class ValidateEnvPlaceholdersPass implements CompilerPassInterface {
private const TYPE_FIXTURES = [
'array' => [],
'bool' => false,
'float' => 0.0,
'int' => 0,
'string' => '',
];
private array $extensionConfig = [];
public function process(ContainerBuilder $container) : void {
$this->extensionConfig = [];
if (!class_exists(BaseNode::class) || !($extensions = $container->getExtensions())) {
return;
}
$resolvingBag = $container->getParameterBag();
if (!$resolvingBag instanceof EnvPlaceholderParameterBag) {
return;
}
$defaultBag = new ParameterBag($resolvingBag->all());
$envTypes = $resolvingBag->getProvidedTypes();
foreach ($resolvingBag->getEnvPlaceholders() + $resolvingBag->getUnusedEnvPlaceholders() as $env => $placeholders) {
$values = [];
if (false === ($i = strpos($env, ':'))) {
$default = $defaultBag->has("env({$env})") ? $defaultBag->get("env({$env})") : self::TYPE_FIXTURES['string'];
$defaultType = null !== $default ? get_debug_type($default) : 'string';
$values[$defaultType] = $default;
}
else {
$prefix = substr($env, 0, $i);
foreach ($envTypes[$prefix] ?? [
'string',
] as $type) {
$values[$type] = self::TYPE_FIXTURES[$type] ?? null;
}
}
foreach ($placeholders as $placeholder) {
BaseNode::setPlaceholder($placeholder, $values);
}
}
$processor = new Processor();
foreach ($extensions as $name => $extension) {
if (!($extension instanceof ConfigurationExtensionInterface || $extension instanceof ConfigurationInterface) || !($config = array_filter($container->getExtensionConfig($name)))) {
// this extension has no semantic configuration or was not called
continue;
}
$config = $resolvingBag->resolveValue($config);
if ($extension instanceof ConfigurationInterface) {
$configuration = $extension;
}
elseif (null === ($configuration = $extension->getConfiguration($config, $container))) {
continue;
}
$this->extensionConfig[$name] = $processor->processConfiguration($configuration, $config);
}
$resolvingBag->clearUnusedEnvPlaceholders();
}
/**
* @internal
*/
public function getExtensionConfig() : array {
try {
return $this->extensionConfig;
} finally {
$this->extensionConfig = [];
}
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
ValidateEnvPlaceholdersPass::$extensionConfig | private | property | ||
ValidateEnvPlaceholdersPass::getExtensionConfig | public | function | @internal | |
ValidateEnvPlaceholdersPass::process | public | function | You can modify the container here before it is dumped to PHP code. | Overrides CompilerPassInterface::process |
ValidateEnvPlaceholdersPass::TYPE_FIXTURES | private | constant |