|
20 | 20 | use Symfony\Component\DependencyInjection\Compiler\PassConfig;
|
21 | 21 | use Symfony\Component\DependencyInjection\ContainerBuilder;
|
22 | 22 | use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
| 23 | +use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; |
| 24 | +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; |
23 | 25 |
|
24 | 26 | final class ContainerLintCommand extends Command
|
25 | 27 | {
|
@@ -72,8 +74,40 @@ private function getContainerBuilder(): ContainerBuilder
|
72 | 74 | $container = $buildContainer();
|
73 | 75 | } else {
|
74 | 76 | (new XmlFileLoader($container = new ContainerBuilder(), new FileLocator()))->load($kernel->getContainer()->getParameter('debug.container.dump'));
|
| 77 | + |
| 78 | + $this->escapeParameters($container->getParameterBag()); |
75 | 79 | }
|
76 | 80 |
|
77 | 81 | return $this->containerBuilder = $container;
|
78 | 82 | }
|
| 83 | + |
| 84 | + private function escapeParameters(ParameterBagInterface $parameterBag): void |
| 85 | + { |
| 86 | + $isEnvPlaceholderParameterBag = $parameterBag instanceof EnvPlaceholderParameterBag; |
| 87 | + |
| 88 | + foreach ($parameterBag->all() as $name => $value) { |
| 89 | + $parameterBag->set($name, $this->escape($value, $isEnvPlaceholderParameterBag)); |
| 90 | + } |
| 91 | + } |
| 92 | + |
| 93 | + private function escape($value, bool $isEnvPlaceholderParameterBag) |
| 94 | + { |
| 95 | + if (\is_string($value)) { |
| 96 | + $escapedValue = str_replace('%', '%%', $value); |
| 97 | + |
| 98 | + return !$isEnvPlaceholderParameterBag ? $escapedValue : preg_replace('/%(%env\((?:\w*+:)*+\w++\)%)%/', '$1', $escapedValue); |
| 99 | + } |
| 100 | + |
| 101 | + if (\is_array($value)) { |
| 102 | + $escapedValue = []; |
| 103 | + |
| 104 | + foreach ($value as $k => $v) { |
| 105 | + $escapedValue[$k] = $this->escape($v, $isEnvPlaceholderParameterBag); |
| 106 | + } |
| 107 | + |
| 108 | + return $escapedValue; |
| 109 | + } |
| 110 | + |
| 111 | + return $value; |
| 112 | + } |
79 | 113 | }
|
0 commit comments