bug #24016 [DI] Fix tracking env var placeholders nested in object graphs (nicolas-grekas)

This PR was merged into the 3.3 branch.

Discussion
----------

[DI] Fix tracking env var placeholders nested in object graphs

| Q             | A
| ------------- | ---
| Branch?       | 3.3
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #24015
| License       | MIT
| Doc PR        | -

Commits
-------

a8397cf1c7 [DI] Fix tracking env var placeholders nested in object graphs
This commit is contained in:
Fabien Potencier 2017-08-28 15:31:00 -07:00
commit 64bcf6d0fb
2 changed files with 13 additions and 23 deletions

View File

@ -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;
}
}

View File

@ -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());
}
}