Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit edd49bf

Browse files
committed
[FrameworkBundle] Add parameters deprecations to the output of debug:container command
1 parent 68f27ef commit edd49bf

17 files changed

Lines changed: 150 additions & 13 deletions

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ CHANGELOG
55
---
66

77
* Add native return type to `Translator` and to `Application::reset()`
8+
* Add parameters deprecations to the output of `debug:container` command
89

910
6.3
1011
---

src/Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,16 @@ protected function execute(InputInterface $input, OutputInterface $output): int
129129
$options['filter'] = $this->filterToServiceTypes(...);
130130
} elseif ($input->getOption('parameters')) {
131131
$parameters = [];
132-
foreach ($object->getParameterBag()->all() as $k => $v) {
132+
$parameterBag = $object->getParameterBag();
133+
foreach ($parameterBag->all() as $k => $v) {
133134
$parameters[$k] = $object->resolveEnvPlaceholders($v);
134135
}
135136
$object = new ParameterBag($parameters);
137+
if ($parameterBag instanceof ParameterBag) {
138+
foreach ($parameterBag->allDeprecated() as $k => $deprecation) {
139+
$object->deprecate($k, ...$deprecation);
140+
}
141+
}
136142
$options = [];
137143
} elseif ($parameter = $input->getOption('parameter')) {
138144
$options = ['parameter' => $parameter];

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public function describe(OutputInterface $output, mixed $object, array $options
5353
$object instanceof ContainerBuilder && !empty($options['env-vars']) => $this->describeContainerEnvVars($this->getContainerEnvVars($object), $options),
5454
$object instanceof ContainerBuilder && isset($options['group_by']) && 'tags' === $options['group_by'] => $this->describeContainerTags($object, $options),
5555
$object instanceof ContainerBuilder && isset($options['id']) => $this->describeContainerService($this->resolveServiceDefinition($object, $options['id']), $options, $object),
56-
$object instanceof ContainerBuilder && isset($options['parameter']) => $this->describeContainerParameter($object->resolveEnvPlaceholders($object->getParameter($options['parameter'])), $options),
56+
$object instanceof ContainerBuilder && isset($options['parameter']) => $this->describeContainerParameter($object->resolveEnvPlaceholders($object->getParameter($options['parameter'])), $object, $options),
5757
$object instanceof ContainerBuilder && isset($options['deprecations']) => $this->describeContainerDeprecations($object, $options),
5858
$object instanceof ContainerBuilder => $this->describeContainerServices($object, $options),
5959
$object instanceof Definition => $this->describeContainerDefinition($object, $options),
@@ -110,7 +110,7 @@ abstract protected function describeContainerDefinition(Definition $definition,
110110

111111
abstract protected function describeContainerAlias(Alias $alias, array $options = [], ContainerBuilder $container = null): void;
112112

113-
abstract protected function describeContainerParameter(mixed $parameter, array $options = []): void;
113+
abstract protected function describeContainerParameter(mixed $parameter, ContainerBuilder $containerBuilder, array $options = []): void;
114114

115115
abstract protected function describeContainerEnvVars(array $envs, array $options = []): void;
116116

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,17 @@ protected function describeCallable(mixed $callable, array $options = []): void
147147
$this->writeData($this->getCallableData($callable), $options);
148148
}
149149

150-
protected function describeContainerParameter(mixed $parameter, array $options = []): void
150+
protected function describeContainerParameter(mixed $parameter, ContainerBuilder $containerBuilder, array $options = []): void
151151
{
152152
$key = $options['parameter'] ?? '';
153+
$parameterBag = $containerBuilder->getParameterBag();
154+
155+
if ($deprecation = $parameterBag instanceof ParameterBag ? ($parameterBag->allDeprecated()[$key] ?? false) : false) {
156+
$parameter = [
157+
'value' => $parameter,
158+
'deprecated' => sprintf('Deprecated since %s %s: %s', $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2))),
159+
];
160+
}
153161

154162
$this->writeData([$key => $parameter], $options);
155163
}
@@ -220,6 +228,21 @@ protected function getRouteData(Route $route): array
220228
return $data;
221229
}
222230

231+
protected function sortParameters(ParameterBag $parameters): array
232+
{
233+
$sortedParameters = parent::sortParameters($parameters);
234+
235+
foreach ($parameters->allDeprecated() as $parameter => $deprecation) {
236+
$value = $sortedParameters[$parameter];
237+
$sortedParameters[$parameter] = [
238+
'value' => $value,
239+
'deprecated' => sprintf('Deprecated since %s %s: %s', $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2))),
240+
];
241+
}
242+
243+
return $sortedParameters;
244+
}
245+
223246
private function getContainerDefinitionData(Definition $definition, bool $omitTags = false, bool $showArguments = false, ContainerBuilder $container = null, string $id = null): array
224247
{
225248
$data = [

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,16 @@ protected function describeRoute(Route $route, array $options = []): void
6868

6969
protected function describeContainerParameters(ParameterBag $parameters, array $options = []): void
7070
{
71+
$deprecatedParameters = $parameters->allDeprecated();
72+
7173
$this->write("Container parameters\n====================\n");
7274
foreach ($this->sortParameters($parameters) as $key => $value) {
73-
$this->write(sprintf("\n- `%s`: `%s`", $key, $this->formatParameter($value)));
75+
$this->write(sprintf(
76+
"\n- `%s`: `%s`%s",
77+
$key,
78+
$this->formatParameter($value),
79+
isset($deprecatedParameters[$key]) ? sprintf(' *(Deprecated since %s %s: %s)*', $deprecatedParameters[$key][0], $deprecatedParameters[$key][1], sprintf(...\array_slice($deprecatedParameters[$key], 2))) : ''
80+
));
7481
}
7582
}
7683

@@ -287,9 +294,16 @@ protected function describeContainerAlias(Alias $alias, array $options = [], Con
287294
$this->describeContainerDefinition($container->getDefinition((string) $alias), array_merge($options, ['id' => (string) $alias]), $container);
288295
}
289296

290-
protected function describeContainerParameter(mixed $parameter, array $options = []): void
297+
protected function describeContainerParameter(mixed $parameter, ContainerBuilder $containerBuilder, array $options = []): void
291298
{
292-
$this->write(isset($options['parameter']) ? sprintf("%s\n%s\n\n%s", $options['parameter'], str_repeat('=', \strlen($options['parameter'])), $this->formatParameter($parameter)) : $parameter);
299+
$parameterBag = $containerBuilder->getParameterBag();
300+
301+
if (isset($options['parameter'])) {
302+
$deprecation = $parameterBag instanceof ParameterBag ? ($parameterBag->allDeprecated()[$options['parameter']] ?? null) : null;
303+
$this->write(sprintf("%s\n%s\n\n%s%s", $options['parameter'], str_repeat('=', \strlen($options['parameter'])), $this->formatParameter($parameter), $deprecation ? sprintf("\n\n*(Deprecated since %s %s: %s)*", $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2))) : ''));
304+
} else {
305+
$this->write($parameter);
306+
}
293307
}
294308

295309
protected function describeContainerEnvVars(array $envs, array $options = []): void

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,14 @@ protected function describeContainerParameters(ParameterBag $parameters, array $
116116
{
117117
$tableHeaders = ['Parameter', 'Value'];
118118

119+
$deprecatedParameters = $parameters->allDeprecated();
120+
119121
$tableRows = [];
120122
foreach ($this->sortParameters($parameters) as $parameter => $value) {
123+
if (isset($deprecatedParameters[$parameter])) {
124+
$parameter .= "\n".sprintf('<comment>(Deprecated since %s %s: %s)</comment>', $deprecatedParameters[$parameter][0], $deprecatedParameters[$parameter][1], sprintf(...\array_slice($deprecatedParameters[$parameter], 2)));
125+
}
126+
121127
$tableRows[] = [$parameter, $this->formatParameter($value)];
122128
}
123129

@@ -409,12 +415,19 @@ protected function describeContainerAlias(Alias $alias, array $options = [], Con
409415
$this->describeContainerDefinition($container->getDefinition((string) $alias), array_merge($options, ['id' => (string) $alias]), $container);
410416
}
411417

412-
protected function describeContainerParameter(mixed $parameter, array $options = []): void
418+
protected function describeContainerParameter(mixed $parameter, ContainerBuilder $containerBuilder, array $options = []): void
413419
{
420+
$parameterName = $options['parameter'];
421+
$parameterBag = $containerBuilder->getParameterBag();
422+
423+
if ($deprecation = $parameterBag instanceof ParameterBag ? ($parameterBag->allDeprecated()[$parameterName] ?? false) : false) {
424+
$parameterName .= "\n".sprintf('<comment>(Deprecated since %s %s: %s)</comment>', $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2)));
425+
}
426+
414427
$options['output']->table(
415428
['Parameter', 'Value'],
416429
[
417-
[$options['parameter'], $this->formatParameter($parameter),
430+
[$parameterName, $this->formatParameter($parameter),
418431
],
419432
]);
420433
}

src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ protected function describeCallable(mixed $callable, array $options = []): void
9898
$this->writeDocument($this->getCallableDocument($callable));
9999
}
100100

101-
protected function describeContainerParameter(mixed $parameter, array $options = []): void
101+
protected function describeContainerParameter(mixed $parameter, ContainerBuilder $containerBuilder, array $options = []): void
102102
{
103-
$this->writeDocument($this->getContainerParameterDocument($parameter, $options));
103+
$this->writeDocument($this->getContainerParameterDocument($parameter, $containerBuilder, $options));
104104
}
105105

106106
protected function describeContainerEnvVars(array $envs, array $options = []): void
@@ -227,10 +227,16 @@ private function getContainerParametersDocument(ParameterBag $parameters): \DOMD
227227
$dom = new \DOMDocument('1.0', 'UTF-8');
228228
$dom->appendChild($parametersXML = $dom->createElement('parameters'));
229229

230+
$deprecatedParameters = $parameters->allDeprecated();
231+
230232
foreach ($this->sortParameters($parameters) as $key => $value) {
231233
$parametersXML->appendChild($parameterXML = $dom->createElement('parameter'));
232234
$parameterXML->setAttribute('key', $key);
233235
$parameterXML->appendChild(new \DOMText($this->formatParameter($value)));
236+
237+
if (isset($deprecatedParameters[$key])) {
238+
$parameterXML->setAttribute('deprecated', sprintf('Deprecated since %s %s: %s', $deprecatedParameters[$key][0], $deprecatedParameters[$key][1], sprintf(...\array_slice($deprecatedParameters[$key], 2))));
239+
}
234240
}
235241

236242
return $dom;
@@ -467,13 +473,19 @@ private function getContainerAliasDocument(Alias $alias, string $id = null): \DO
467473
return $dom;
468474
}
469475

470-
private function getContainerParameterDocument(mixed $parameter, array $options = []): \DOMDocument
476+
private function getContainerParameterDocument(mixed $parameter, ContainerBuilder $containerBuilder, array $options = []): \DOMDocument
471477
{
472478
$dom = new \DOMDocument('1.0', 'UTF-8');
473479
$dom->appendChild($parameterXML = $dom->createElement('parameter'));
474480

475481
if (isset($options['parameter'])) {
476482
$parameterXML->setAttribute('key', $options['parameter']);
483+
484+
$parameterBag = $containerBuilder->getParameterBag();
485+
486+
if ($deprecation = $parameterBag instanceof ParameterBag ? ($parameterBag->allDeprecated()[$options['parameter']] ?? false) : false) {
487+
$parameterXML->setAttribute('deprecated', sprintf('Deprecated since %s %s: %s', $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2))));
488+
}
477489
}
478490

479491
$parameterXML->appendChild(new \DOMText($this->formatParameter($parameter)));

src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/AbstractDescriptorTestCase.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,13 @@ public static function getDescribeContainerDefinitionWhichIsAnAliasTestData(): a
169169
return $data;
170170
}
171171

172-
/** @dataProvider getDescribeContainerParameterTestData */
172+
/**
173+
* The legacy group must be kept as deprecations will always be raised.
174+
*
175+
* @group legacy
176+
*
177+
* @dataProvider getDescribeContainerParameterTestData
178+
*/
173179
public function testDescribeContainerParameter($parameter, $expectedDescription, array $options)
174180
{
175181
$this->assertDescription($expectedDescription, $parameter, $options);
@@ -185,6 +191,9 @@ public static function getDescribeContainerParameterTestData(): array
185191
$file = array_pop($data[1]);
186192
$data[1][] = ['parameter' => 'twig.form.resources'];
187193
$data[1][] = $file;
194+
$file = array_pop($data[2]);
195+
$data[2][] = ['parameter' => 'deprecated_foo'];
196+
$data[2][] = $file;
188197

189198
return $data;
190199
}

src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/ObjectsProvider.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ public static function getContainerParameters()
8080
'single' => FooUnitEnum::BAR,
8181
],
8282
]);
83+
84+
$parameterBag = new ParameterBag([
85+
'integer' => 12,
86+
'string' => 'Hello world!',
87+
]);
88+
$parameterBag->deprecate('string', 'symfony/framework-bundle', '6.4');
89+
90+
yield 'deprecated_parameters' => $parameterBag;
8391
}
8492

8593
public static function getContainerParameter()
@@ -92,10 +100,13 @@ public static function getContainerParameter()
92100
'form_div_layout.html.twig',
93101
'form_table_layout.html.twig',
94102
]);
103+
$builder->setParameter('deprecated_foo', 'bar');
104+
$builder->deprecateParameter('deprecated_foo', 'symfony/framework-bundle', '6.4');
95105

96106
return [
97107
'parameter' => $builder,
98108
'array_parameter' => $builder,
109+
'deprecated_parameter' => $builder,
99110
];
100111
}
101112

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"deprecated_foo": {
3+
"value": "bar",
4+
"deprecated": "Deprecated since symfony\/framework-bundle 6.4: The parameter \"deprecated_foo\" is deprecated."
5+
}
6+
}

0 commit comments

Comments
 (0)