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 ' , str_replace ('% ' , '%% ' , $ 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