Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commit59da7ea

Browse files
committed
feature#47683 [DependencyInjection] Deprecate numeric parameter names (HeahDude)
This PR was merged into the 6.2 branch.Discussion----------[DependencyInjection] Deprecate numeric parameter names| Q | A| ------------- | ---| Branch? | 6.2| Bug fix? | no| New feature? | no| Deprecations? | yes| Tickets | ~| License | MIT| Doc PR | TODOWhile trying to use `'.' !== $key[0]` instead of `str_starts_with($key, '.')` in#47680, I noticed some tests were failing due to the usage of numeric parameter names in the fixtures.This leads to inconsistent behavior since the following code: `$parameterBag->set(10, 10)`, will first cast the name `10` to string because of the method signature, but will then cast back to integer when using it as an array key inhttps://github.com/symfony/symfony/blob/6.2/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php#L89.Because Symfony does not use strict types, it can be really tricky.This PR propose to deprecate using such names to be able to properly throw in 7.0.Commits-------3e0050a [DependencyInjection] Deprecate numeric parameter names
2 parents7b212a1 +3e0050a commit59da7ea

File tree

10 files changed

+135
-16
lines changed

10 files changed

+135
-16
lines changed

‎UPGRADE-6.2.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ DependencyInjection
1818

1919
* Change the signature of`ContainerAwareInterface::setContainer()` to`setContainer(?ContainerInterface)`
2020
* Deprecate calling`ContainerAwareTrait::setContainer()` without arguments
21+
* Deprecate using numeric parameter names
2122

2223
Form
2324
----

‎src/Symfony/Component/DependencyInjection/CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ CHANGELOG
1111
* Allow #[When] to be extended
1212
* Change the signature of`ContainerAwareInterface::setContainer()` to`setContainer(?ContainerInterface)`
1313
* Deprecate calling`ContainerAwareTrait::setContainer()` without arguments
14+
* Deprecate using numeric parameter names
1415

1516
6.1
1617
---

‎src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ public function get(string $name): array|bool|string|int|float|\UnitEnum|null
8686

8787
publicfunctionset(string$name,array|bool|string|int|float|\UnitEnum|null$value)
8888
{
89+
if (is_numeric($name)) {
90+
trigger_deprecation('symfony/dependency-injection','6.2',sprintf('Using numeric parameter name "%s" is deprecated and will throw as of 7.0.',$name));
91+
// uncomment the following line in 7.0
92+
// throw new InvalidArgumentException(sprintf('The parameter name "%s" cannot be numeric.', $name));
93+
}
94+
8995
$this->parameters[$name] =$value;
9096
}
9197

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/ini/types.ini‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,23 @@
99
no = no
1010
none = none
1111
constant = PHP_VERSION
12-
12 = 12
12+
12_int = 12
1313
12_string ='12'
1414
12_quoted_number ="12"
1515
12_comment = 12; comment
1616
12_string_comment ='12'; comment
1717
12_quoted_number_comment ="12"; comment
18-
-12 = -12
19-
0 = 0
20-
1 = 1
21-
0b0110 = 0b0110
22-
11112222333344445555 = 1111,2222,3333,4444,5555
23-
0777 = 0777
24-
255 = 0xFF
25-
100.0 = 1e2
26-
-120.0 = -1.2E2
27-
-10100.1 = -10100.1
28-
-10,100.1 = -10,100.1
18+
-12_negative = -12
19+
zero = 0
20+
one = 1
21+
0b0110_byte_string = 0b0110
22+
11112222333344445555_great_number = 1111,2222,3333,4444,5555
23+
0777_number_starting_with_0 = 0777
24+
255_hexadecimal = 0xFF
25+
100.0_exponential = 1e2
26+
-120.0_exponential = -1.2E2
27+
-10100.1_negative_float = -10100.1
28+
-10,100.1_negative_float = -10,100.1
2929
list[] = 1
3030
list[] = 2
3131
map[one] = 1
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
[parameters]
2+
true = true
3+
true_comment = true; comment
4+
false = false
5+
null = null
6+
on = on
7+
off = off
8+
yes = yes
9+
no = no
10+
none = none
11+
constant = PHP_VERSION
12+
12 = 12
13+
12_string ='12'
14+
12_quoted_number ="12"
15+
12_comment = 12; comment
16+
12_string_comment ='12'; comment
17+
12_quoted_number_comment ="12"; comment
18+
-12 = -12
19+
0 = 0
20+
1 = 1
21+
0b0110 = 0b0110
22+
11112222333344445555 = 1111,2222,3333,4444,5555
23+
0777 = 0777
24+
255 = 0xFF
25+
100.0 = 1e2
26+
-120.0 = -1.2E2
27+
-10100.1 = -10100.1
28+
-10,100.1 = -10,100.1
29+
list[] = 1
30+
list[] = 2
31+
map[one] = 1
32+
map[two] = 2

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services2.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
55
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
66
<parameters>
7-
<parameter>a string</parameter>
7+
<parameterkey="a_string">a string</parameter>
88
<parameterkey="foo">bar</parameter>
99
<parameterkey="values"type="collection">
1010
<parameter>0</parameter>

‎src/Symfony/Component/DependencyInjection/Tests/Loader/FileLoaderTest.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public function testImportWithGlobPattern()
5959

6060
$actual =$container->getParameterBag()->all();
6161
$expected = [
62-
'a string',
62+
'a_string' =>'a string',
6363
'foo' =>'bar',
6464
'values' => [
6565
0,

‎src/Symfony/Component/DependencyInjection/Tests/Loader/IniFileLoaderTest.php‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,56 @@ public function testTypeConversionsWithNativePhp($key, $value, $supported)
5959
}
6060

6161
publicfunctiongetTypeConversions()
62+
{
63+
return [
64+
['true_comment',true,true],
65+
['true',true,true],
66+
['false',false,true],
67+
['on',true,true],
68+
['off',false,true],
69+
['yes',true,true],
70+
['no',false,true],
71+
['none',false,true],
72+
['null',null,true],
73+
['constant', \PHP_VERSION,true],
74+
['12_int',12,true],
75+
['12_string','12',true],
76+
['12_quoted_number',12,false],// INI_SCANNER_RAW removes the double quotes
77+
['12_comment',12,true],
78+
['12_string_comment','12',true],
79+
['12_quoted_number_comment',12,false],// INI_SCANNER_RAW removes the double quotes
80+
['-12_negative', -12,true],
81+
['one',1,true],
82+
['zero',0,true],
83+
['0b0110_byte_string',bindec('0b0110'),false],// not supported by INI_SCANNER_TYPED
84+
['11112222333344445555_great_number','1111,2222,3333,4444,5555',true],
85+
['0777_number_starting_with_0',0777,false],// not supported by INI_SCANNER_TYPED
86+
['255_hexadecimal',0xFF,false],// not supported by INI_SCANNER_TYPED
87+
['100.0_exponential',1e2,false],// not supported by INI_SCANNER_TYPED
88+
['-120.0_exponential', -1.2E2,false],// not supported by INI_SCANNER_TYPED
89+
['-10100.1_negative_float', -10100.1,false],// not supported by INI_SCANNER_TYPED
90+
['-10,100.1_negative_float','-10,100.1',true],
91+
['list', [1,2],true],
92+
['map', ['one' =>1,'two' =>2],true],
93+
];
94+
}
95+
96+
/**
97+
* @group legacy
98+
*
99+
* @dataProvider getLegacyTypeConversions
100+
*/
101+
publicfunctiontestLegacyTypeConversionsWithNativePhp($key,$value,$supported)
102+
{
103+
if (!$supported) {
104+
$this->markTestSkipped(sprintf('Converting the value "%s" to "%s" is not supported by the IniFileLoader.',$key,$value));
105+
}
106+
107+
$expected =parse_ini_file(__DIR__.'/../Fixtures/ini/types_legacy.ini',true, \INI_SCANNER_TYPED);
108+
$this->assertSame($value,$expected['parameters'][$key],'->load() converts values to PHP types');
109+
}
110+
111+
publicfunctiongetLegacyTypeConversions()
62112
{
63113
return [
64114
['true_comment',true,true],

‎src/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public function testLoadParameters()
123123

124124
$actual =$container->getParameterBag()->all();
125125
$expected = [
126-
'a string',
126+
'a_string' =>'a string',
127127
'foo' =>'bar',
128128
'values' => [
129129
0,
@@ -159,7 +159,7 @@ public function testLoadImports()
159159

160160
$actual =$container->getParameterBag()->all();
161161
$expected = [
162-
'a string',
162+
'a_string' =>'a string',
163163
'foo' =>'bar',
164164
'values' => [
165165
0,

‎src/Symfony/Component/DependencyInjection/Tests/ParameterBag/ParameterBagTest.php‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,35 @@ public function testGetSet()
6666
}
6767
}
6868

69+
/**
70+
* @group legacy
71+
* Test it will throw in 7.0
72+
*/
73+
publicfunctiontestGetSetNumericName()
74+
{
75+
$bag =newParameterBag(['foo']);
76+
$bag->set(1001,'foo');
77+
$this->assertEquals('foo',$bag->get(1001),'->set() sets the value of a new parameter');
78+
79+
$bag->set(10.0,'foo');
80+
$this->assertEquals('foo',$bag->get(10),'->set() sets the value of a new parameter');
81+
82+
$bag->set(0b0110,'foo');
83+
$this->assertEquals('foo',$bag->get(0b0110),'->set() sets the value of a new parameter');
84+
85+
$bag->set('0','baz');
86+
$this->assertEquals('baz',$bag->get(0),'->set() overrides previously set parameter');
87+
88+
$this->assertTrue($bag->has(0));
89+
$this->assertTrue($bag->has(1001));
90+
$this->assertTrue($bag->has(10));
91+
$this->assertTrue($bag->has(0b0110));
92+
93+
foreach (array_keys($bag->all())as$key) {
94+
$this->assertIsInt($key,'Numeric string keys are cast to integers');
95+
}
96+
}
97+
6998
/**
7099
* @dataProvider provideGetThrowParameterNotFoundExceptionData
71100
*/

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp