Skip to content

Commit d81b94e

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

17 files changed

+150
-13
lines changed

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('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('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(' *(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*(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>(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>(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('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('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": "Since symfony\/framework-bundle 6.4: The parameter \"deprecated_foo\" is deprecated."
5+
}
6+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy