bug #37193 [DependencyInjection][CheckTypeDeclarationsPass] Always resolve parameters (fancyweb)
This PR was merged into the 4.4 branch.
Discussion
----------
[DependencyInjection][CheckTypeDeclarationsPass] Always resolve parameters
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | https://github.com/symfony/symfony/issues/37166
| License | MIT
| Doc PR | -
> Only array parameters are not inlined when dumped.
This is true only when the XML debug container is used, not on a live container that can contain unresolved parameters in the `%my_param%` form. That was my mistake. We have to resolve to get the parameter type.
`$value = [];` was just an improvement to avoid useless parameter resolve btw.
Commits
-------
da0e2c36ef
[DependencyInjection][CheckTypeDeclarationsPass] Always resolve parameters
This commit is contained in:
commit
b1f2a1409c
|
@ -198,8 +198,7 @@ final class CheckTypeDeclarationsPass extends AbstractRecursivePass
|
||||||
}
|
}
|
||||||
} elseif (\is_string($value)) {
|
} elseif (\is_string($value)) {
|
||||||
if ('%' === ($value[0] ?? '') && preg_match('/^%([^%]+)%$/', $value, $match)) {
|
if ('%' === ($value[0] ?? '') && preg_match('/^%([^%]+)%$/', $value, $match)) {
|
||||||
// Only array parameters are not inlined when dumped.
|
$value = $this->container->getParameter(substr($value, 1, -1));
|
||||||
$value = [];
|
|
||||||
} elseif ($envPlaceholderUniquePrefix && false !== strpos($value, 'env_')) {
|
} elseif ($envPlaceholderUniquePrefix && 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.
|
// 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.
|
// We don't need to change the value because it is already a string.
|
||||||
|
|
|
@ -612,20 +612,6 @@ class CheckTypeDeclarationsPassTest extends TestCase
|
||||||
$this->assertInstanceOf(\stdClass::class, $container->get('bar')->foo);
|
$this->assertInstanceOf(\stdClass::class, $container->get('bar')->foo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testProcessResolveArrayParameters()
|
|
||||||
{
|
|
||||||
$container = new ContainerBuilder();
|
|
||||||
$container->setParameter('ccc', ['foobar']);
|
|
||||||
|
|
||||||
$container
|
|
||||||
->register('foobar', BarMethodCall::class)
|
|
||||||
->addMethodCall('setArray', ['%ccc%']);
|
|
||||||
|
|
||||||
(new CheckTypeDeclarationsPass(true))->process($container);
|
|
||||||
|
|
||||||
$this->addToAssertionCount(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testProcessResolveExpressions()
|
public function testProcessResolveExpressions()
|
||||||
{
|
{
|
||||||
$container = new ContainerBuilder();
|
$container = new ContainerBuilder();
|
||||||
|
@ -791,4 +777,20 @@ class CheckTypeDeclarationsPassTest extends TestCase
|
||||||
|
|
||||||
$this->addToAssertionCount(1);
|
$this->addToAssertionCount(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testProcessResolveParameters()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container->setParameter('array_param', ['foobar']);
|
||||||
|
$container->setParameter('string_param', 'ccc');
|
||||||
|
|
||||||
|
$container
|
||||||
|
->register('foobar', BarMethodCall::class)
|
||||||
|
->addMethodCall('setArray', ['%array_param%'])
|
||||||
|
->addMethodCall('setString', ['%string_param%']);
|
||||||
|
|
||||||
|
(new CheckTypeDeclarationsPass(true))->process($container);
|
||||||
|
|
||||||
|
$this->addToAssertionCount(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,4 +44,8 @@ class BarMethodCall
|
||||||
public function setClosure(\Closure $closure): void
|
public function setClosure(\Closure $closure): void
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setString(string $string)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue