Skip to content

Commit

Permalink
[DependencyInjection][CheckTypeDeclarationsPass] Handle unresolved pa…
Browse files Browse the repository at this point in the history
…rameters pointing to environment variables
  • Loading branch information
fancyweb committed Jun 11, 2020
1 parent 51be09c commit ae185b8
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
Expand Up @@ -199,7 +199,9 @@ private function checkType(Definition $checkedDefinition, $value, \ReflectionPar
} elseif (\is_string($value)) {
if ('%' === ($value[0] ?? '') && preg_match('/^%([^%]+)%$/', $value, $match)) {
$value = $this->container->getParameter(substr($value, 1, -1));
} elseif ($envPlaceholderUniquePrefix && false !== strpos($value, 'env_')) {
}

if ($envPlaceholderUniquePrefix && \is_string($value) && false !== strpos($value, 'env_')) {
// If the value is an env placeholder that is either mixed with a string or with another env placeholder, then its resolved value will always be a string, so we don't need to resolve it.
// We don't need to change the value because it is already a string.
if ('' === preg_replace('/'.$envPlaceholderUniquePrefix.'_\w+_[a-f0-9]{32}/U', '', $value, -1, $c) && 1 === $c) {
Expand Down
Expand Up @@ -780,17 +780,27 @@ public function testExpressionLanguageWithSyntheticService()

public function testProcessResolveParameters()
{
$container = new ContainerBuilder();
putenv('ARRAY={"foo":"bar"}');

$container = new ContainerBuilder(new EnvPlaceholderParameterBag([
'env_array_param' => '%env(json:ARRAY)%',
]));
$container->setParameter('array_param', ['foobar']);
$container->setParameter('string_param', 'ccc');

$container
->register('foobar', BarMethodCall::class)
$definition = $container->register('foobar', BarMethodCall::class);
$definition
->addMethodCall('setArray', ['%array_param%'])
->addMethodCall('setString', ['%string_param%']);

(new ResolveParameterPlaceHoldersPass())->process($container);

$definition->addMethodCall('setArray', ['%env_array_param%']);

(new CheckTypeDeclarationsPass(true))->process($container);

$this->addToAssertionCount(1);

putenv('ARRAY=');
}
}

0 comments on commit ae185b8

Please sign in to comment.