Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4e16f7b

Browse filesBrowse files
committed
feature #51011 [FrameworkBundle] Add parameters deprecations to the output of debug:container command (HeahDude)
This PR was squashed before being merged into the 6.4 branch. Discussion ---------- [FrameworkBundle] Add parameters deprecations to the output of `debug:container` command | Q | A | ------------- | --- | Branch? | 6.4 | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | ~ | License | MIT | Doc PR | ~ Since #47719 parameters can be deprecated but one needs to read the deprecation logs carefully. It would be convenient to have the info when dumping them with debug commands. Here's a glimpse of text format (the fixtures in tests can do the rest): <img width="1126" alt="Screenshot 2023-07-18 at 12 50 49 PM" src="https://github.com/symfony/symfony/assets/10107633/6a2ea20b-be3c-4428-bb5d-aa97f3b38803"> I don't know if we really want to support all formats since it may break BC somehow if parsers are used to read the output. I still tried to adapt them all in this PR for consistency. But JSON required an object to display both the value and the deprecation, another way could be to add a specific entry for one or all deprecations. Commits ------- 7963e9d [FrameworkBundle] Add parameters deprecations to the output of `debug:container` command
2 parents c26b264 + 7963e9d commit 4e16f7b
Copy full SHA for 4e16f7b

17 files changed

+157
-19
lines changed

‎src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ CHANGELOG
3030
* Change BrowserKitAssertionsTrait::getClient() to be protected
3131
* Deprecate the `framework.asset_mapper.provider` config option
3232
* Add `--exclude` option to the `cache:pool:clear` command
33+
* Add parameters deprecations to the output of `debug:container` command
3334

3435
6.3
3536
---

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php
+7-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php
+7-2Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,19 @@ public function describe(OutputInterface $output, mixed $object, array $options
4343
(new AnalyzeServiceReferencesPass(false, false))->process($object);
4444
}
4545

46+
$deprecatedParameters = [];
47+
if ($object instanceof ContainerBuilder && isset($options['parameter']) && ($parameterBag = $object->getParameterBag()) instanceof ParameterBag) {
48+
$deprecatedParameters = $parameterBag->allDeprecated();
49+
}
50+
4651
match (true) {
4752
$object instanceof RouteCollection => $this->describeRouteCollection($object, $options),
4853
$object instanceof Route => $this->describeRoute($object, $options),
4954
$object instanceof ParameterBag => $this->describeContainerParameters($object, $options),
5055
$object instanceof ContainerBuilder && !empty($options['env-vars']) => $this->describeContainerEnvVars($this->getContainerEnvVars($object), $options),
5156
$object instanceof ContainerBuilder && isset($options['group_by']) && 'tags' === $options['group_by'] => $this->describeContainerTags($object, $options),
5257
$object instanceof ContainerBuilder && isset($options['id']) => $this->describeContainerService($this->resolveServiceDefinition($object, $options['id']), $options, $object),
53-
$object instanceof ContainerBuilder && isset($options['parameter']) => $this->describeContainerParameter($object->resolveEnvPlaceholders($object->getParameter($options['parameter'])), $options),
58+
$object instanceof ContainerBuilder && isset($options['parameter']) => $this->describeContainerParameter($object->resolveEnvPlaceholders($object->getParameter($options['parameter'])), $deprecatedParameters[$options['parameter']] ?? null, $options),
5459
$object instanceof ContainerBuilder && isset($options['deprecations']) => $this->describeContainerDeprecations($object, $options),
5560
$object instanceof ContainerBuilder => $this->describeContainerServices($object, $options),
5661
$object instanceof Definition => $this->describeContainerDefinition($object, $options),
@@ -107,7 +112,7 @@ abstract protected function describeContainerDefinition(Definition $definition,
107112

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

110-
abstract protected function describeContainerParameter(mixed $parameter, array $options = []): void;
115+
abstract protected function describeContainerParameter(mixed $parameter, ?array $deprecation, array $options = []): void;
111116

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

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php
+24-2Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,16 @@ protected function describeCallable(mixed $callable, array $options = []): void
150150
$this->writeData($this->getCallableData($callable), $options);
151151
}
152152

153-
protected function describeContainerParameter(mixed $parameter, array $options = []): void
153+
protected function describeContainerParameter(mixed $parameter, ?array $deprecation, array $options = []): void
154154
{
155155
$key = $options['parameter'] ?? '';
156+
$data = [$key => $parameter];
156157

157-
$this->writeData([$key => $parameter], $options);
158+
if ($deprecation) {
159+
$data['_deprecation'] = sprintf('Since %s %s: %s', $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2)));
160+
}
161+
162+
$this->writeData($data, $options);
158163
}
159164

160165
protected function describeContainerEnvVars(array $envs, array $options = []): void
@@ -223,6 +228,23 @@ protected function getRouteData(Route $route): array
223228
return $data;
224229
}
225230

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

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php
+14-3Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,16 @@ protected function describeRoute(Route $route, array $options = []): void
7171

7272
protected function describeContainerParameters(ParameterBag $parameters, array $options = []): void
7373
{
74+
$deprecatedParameters = $parameters->allDeprecated();
75+
7476
$this->write("Container parameters\n====================\n");
7577
foreach ($this->sortParameters($parameters) as $key => $value) {
76-
$this->write(sprintf("\n- `%s`: `%s`", $key, $this->formatParameter($value)));
78+
$this->write(sprintf(
79+
"\n- `%s`: `%s`%s",
80+
$key,
81+
$this->formatParameter($value),
82+
isset($deprecatedParameters[$key]) ? sprintf(' *Since %s %s: %s*', $deprecatedParameters[$key][0], $deprecatedParameters[$key][1], sprintf(...\array_slice($deprecatedParameters[$key], 2))) : ''
83+
));
7784
}
7885
}
7986

@@ -290,9 +297,13 @@ protected function describeContainerAlias(Alias $alias, array $options = [], Con
290297
$this->describeContainerDefinition($container->getDefinition((string) $alias), array_merge($options, ['id' => (string) $alias]), $container);
291298
}
292299

293-
protected function describeContainerParameter(mixed $parameter, array $options = []): void
300+
protected function describeContainerParameter(mixed $parameter, ?array $deprecation, array $options = []): void
294301
{
295-
$this->write(isset($options['parameter']) ? sprintf("%s\n%s\n\n%s", $options['parameter'], str_repeat('=', \strlen($options['parameter'])), $this->formatParameter($parameter)) : $parameter);
302+
if (isset($options['parameter'])) {
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+
}
296307
}
297308

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

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php
+24-7Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\Console\Formatter\OutputFormatter;
1515
use Symfony\Component\Console\Helper\Dumper;
1616
use Symfony\Component\Console\Helper\Table;
17+
use Symfony\Component\Console\Helper\TableCell;
1718
use Symfony\Component\Console\Style\SymfonyStyle;
1819
use Symfony\Component\DependencyInjection\Alias;
1920
use Symfony\Component\DependencyInjection\Argument\AbstractArgument;
@@ -124,9 +125,18 @@ protected function describeContainerParameters(ParameterBag $parameters, array $
124125
{
125126
$tableHeaders = ['Parameter', 'Value'];
126127

128+
$deprecatedParameters = $parameters->allDeprecated();
129+
127130
$tableRows = [];
128131
foreach ($this->sortParameters($parameters) as $parameter => $value) {
129132
$tableRows[] = [$parameter, $this->formatParameter($value)];
133+
134+
if (isset($deprecatedParameters[$parameter])) {
135+
$tableRows[] = [new TableCell(
136+
sprintf('<comment>(Since %s %s: %s)</comment>', $deprecatedParameters[$parameter][0], $deprecatedParameters[$parameter][1], sprintf(...\array_slice($deprecatedParameters[$parameter], 2))),
137+
['colspan' => 2]
138+
)];
139+
}
130140
}
131141

132142
$options['output']->title('Symfony Container Parameters');
@@ -425,14 +435,21 @@ protected function describeContainerAlias(Alias $alias, array $options = [], Con
425435
$this->describeContainerDefinition($container->getDefinition((string) $alias), array_merge($options, ['id' => (string) $alias]), $container);
426436
}
427437

428-
protected function describeContainerParameter(mixed $parameter, array $options = []): void
438+
protected function describeContainerParameter(mixed $parameter, ?array $deprecation, array $options = []): void
429439
{
430-
$options['output']->table(
431-
['Parameter', 'Value'],
432-
[
433-
[$options['parameter'], $this->formatParameter($parameter),
434-
],
435-
]);
440+
$parameterName = $options['parameter'];
441+
$rows = [
442+
[$parameterName, $this->formatParameter($parameter)],
443+
];
444+
445+
if ($deprecation) {
446+
$rows[] = [new TableCell(
447+
sprintf('<comment>(Since %s %s: %s)</comment>', $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2))),
448+
['colspan' => 2]
449+
)];
450+
}
451+
452+
$options['output']->table(['Parameter', 'Value'], $rows);
436453
}
437454

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

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php
+13-3Lines changed: 13 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, ?array $deprecation, array $options = []): void
102102
{
103-
$this->writeDocument($this->getContainerParameterDocument($parameter, $options));
103+
$this->writeDocument($this->getContainerParameterDocument($parameter, $deprecation, $options));
104104
}
105105

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

238+
$deprecatedParameters = $parameters->allDeprecated();
239+
238240
foreach ($this->sortParameters($parameters) as $key => $value) {
239241
$parametersXML->appendChild($parameterXML = $dom->createElement('parameter'));
240242
$parameterXML->setAttribute('key', $key);
241243
$parameterXML->appendChild(new \DOMText($this->formatParameter($value)));
244+
245+
if (isset($deprecatedParameters[$key])) {
246+
$parameterXML->setAttribute('deprecated', sprintf('Since %s %s: %s', $deprecatedParameters[$key][0], $deprecatedParameters[$key][1], sprintf(...\array_slice($deprecatedParameters[$key], 2))));
247+
}
242248
}
243249

244250
return $dom;
@@ -475,13 +481,17 @@ private function getContainerAliasDocument(Alias $alias, string $id = null): \DO
475481
return $dom;
476482
}
477483

478-
private function getContainerParameterDocument(mixed $parameter, array $options = []): \DOMDocument
484+
private function getContainerParameterDocument(mixed $parameter, ?array $deprecation, array $options = []): \DOMDocument
479485
{
480486
$dom = new \DOMDocument('1.0', 'UTF-8');
481487
$dom->appendChild($parameterXML = $dom->createElement('parameter'));
482488

483489
if (isset($options['parameter'])) {
484490
$parameterXML->setAttribute('key', $options['parameter']);
491+
492+
if ($deprecation) {
493+
$parameterXML->setAttribute('deprecated', sprintf('Since %s %s: %s', $deprecation[0], $deprecation[1], sprintf(...\array_slice($deprecation, 2))));
494+
}
485495
}
486496

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

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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/AbstractDescriptorTestCase.php
+10-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/Console/Descriptor/ObjectsProvider.php
+11Lines 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

+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"deprecated_foo": "bar",
3+
"_deprecation": "Since symfony\/framework-bundle 6.4: The parameter \"deprecated_foo\" is deprecated."
4+
}
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
deprecated_foo
2+
==============
3+
4+
bar
5+
6+
*Since symfony/framework-bundle 6.4: The parameter "deprecated_foo" is deprecated.*
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-------------------------------------------- -------------------------------------------
2+
 Parameter   Value 
3+
-------------------------------------------- -------------------------------------------
4+
deprecated_foo bar
5+
(Since symfony/framework-bundle 6.4: The parameter "deprecated_foo" is deprecated.)
6+
-------------------------------------------- -------------------------------------------
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<parameter key="deprecated_foo" deprecated="Since symfony/framework-bundle 6.4: The parameter &quot;deprecated_foo&quot; is deprecated.">bar</parameter>
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"integer": 12,
3+
"string": "Hello world!",
4+
"_deprecations": {
5+
"string": "Since symfony\/framework-bundle 6.4: The parameter \"string\" is deprecated."
6+
}
7+
}
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Container parameters
2+
====================
3+
4+
- `integer`: `12`
5+
- `string`: `Hello world!` *Since symfony/framework-bundle 6.4: The parameter "string" is deprecated.*
+11Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
Symfony Container Parameters
3+
============================
4+
5+
---------------------------------------- ---------------------------------------
6+
 Parameter   Value 
7+
---------------------------------------- ---------------------------------------
8+
integer 12
9+
string Hello world!
10+
(Since symfony/framework-bundle 6.4: The parameter "string" is deprecated.)
11+
---------------------------------------- ---------------------------------------
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<parameters>
3+
<parameter key="integer">12</parameter>
4+
<parameter key="string" deprecated="Since symfony/framework-bundle 6.4: The parameter &quot;string&quot; is deprecated.">Hello world!</parameter>
5+
</parameters>

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.