[DI] Fix tracking env var placeholders nested in object graphs
This commit is contained in:
parent
0b46166174
commit
a8397cf1c7
@ -95,7 +95,18 @@ class MergeExtensionConfigurationParameterBag extends EnvPlaceholderParameterBag
|
||||
public function freezeAfterProcessing(Extension $extension)
|
||||
{
|
||||
$this->processedEnvPlaceholders = array();
|
||||
$this->processMergedConfig($extension->getProcessedConfigs(), parent::getEnvPlaceholders());
|
||||
|
||||
// serialize config to catch env vars nested in object graphs
|
||||
$config = serialize($extension->getProcessedConfigs());
|
||||
|
||||
foreach (parent::getEnvPlaceholders() as $env => $placeholders) {
|
||||
foreach ($placeholders as $placeholder) {
|
||||
if (false !== stripos($config, $placeholder)) {
|
||||
$this->processedEnvPlaceholders[$env] = $placeholders;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -105,25 +116,4 @@ class MergeExtensionConfigurationParameterBag extends EnvPlaceholderParameterBag
|
||||
{
|
||||
return null !== $this->processedEnvPlaceholders ? $this->processedEnvPlaceholders : parent::getEnvPlaceholders();
|
||||
}
|
||||
|
||||
private function processMergedConfig($value, array $envPlaceholders)
|
||||
{
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $k => $v) {
|
||||
$this->processMergedConfig($k, $envPlaceholders);
|
||||
$this->processMergedConfig($v, $envPlaceholders);
|
||||
}
|
||||
} elseif (is_string($value)) {
|
||||
foreach ($envPlaceholders as $env => $placeholders) {
|
||||
foreach ($placeholders as $placeholder) {
|
||||
if (false !== stripos($value, $placeholder)) {
|
||||
$this->processedEnvPlaceholders[$env] = $placeholders;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ class MergeExtensionConfigurationPassTest extends TestCase
|
||||
$pass = new MergeExtensionConfigurationPass();
|
||||
$pass->process($container);
|
||||
|
||||
$this->assertSame(array('FOO', 'BAZ'), array_keys($container->getParameterBag()->getEnvPlaceholders()));
|
||||
$this->assertSame(array('BAZ', 'FOO'), array_keys($container->getParameterBag()->getEnvPlaceholders()));
|
||||
$this->assertSame(array('BAZ' => 1, 'FOO' => 0), $container->getEnvCounters());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user