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

Commit0fdaaa8

Browse files
wouterjnicolas-grekas
authored andcommitted
[Routing] Remove variadic constructor signature
1 parent6bc0882 commit0fdaaa8

File tree

2 files changed

+38
-23
lines changed

2 files changed

+38
-23
lines changed

‎src/Symfony/Component/Routing/Requirement/EnumRequirement.php‎

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,42 @@
1515

1616
finalclass EnumRequirementimplements \Stringable
1717
{
18-
/**
19-
* @var string[]
20-
*/
21-
privatereadonlyarray$values;
18+
privatestring$requirement;
2219

2320
/**
2421
* @template T of \BackedEnum
25-
* @param class-string<T> $enum
26-
* @paramT ...$cases
22+
*
23+
* @paramclass-string<T>|list<T>$cases
2724
*/
28-
publicfunction__construct(string$enum,\BackedEnum ...$cases)
25+
publicfunction__construct(string|array$cases = [])
2926
{
30-
if (!\is_subclass_of($enum, \BackedEnum::class,true)) {
31-
thrownewInvalidArgumentException(sprintf('"%s" is not a \BackedEnum class.',$enum));
32-
}
27+
if (\is_string($cases)) {
28+
if (!is_subclass_of($cases, \BackedEnum::class,true)) {
29+
thrownewInvalidArgumentException(sprintf('"%s" is not a "BackedEnum" class.',$cases));
30+
}
31+
32+
$cases =$cases::cases();
33+
}else {
34+
$class =null;
35+
36+
foreach ($casesas$case) {
37+
if (!$caseinstanceof \BackedEnum) {
38+
thrownewInvalidArgumentException(sprintf('Case must be a \BackedEnum instance, "%s" given.',get_debug_type($case)));
39+
}
40+
41+
$class ??=\get_class($case);
3342

34-
foreach ($casesas$case) {
35-
if (!$caseinstanceof$enum) {
36-
thrownewInvalidArgumentException(sprintf('"%s::%s" is not a case of "%s".',\get_class($case),$case->name,$enum));
43+
if (!$caseinstanceof$class) {
44+
thrownewInvalidArgumentException(sprintf('"%s::%s" is not acaseof "%s".',get_debug_type($case),$case->name,$class));
45+
}
3746
}
3847
}
3948

40-
$this->values =array_map(
41-
staticfn (\BackedEnum$e):string =>$e->value,
42-
$cases ?:$enum::cases(),
43-
);
49+
$this->requirement =implode('|',array_map(staticfn ($e) =>preg_quote($e->value),$cases));
4450
}
4551

4652
publicfunction__toString():string
4753
{
48-
returnimplode('|',array_map(preg_quote(...),$this->values));
54+
return$this->requirement;
4955
}
5056
}

‎src/Symfony/Component/Routing/Tests/Requirement/EnumRequirementTest.php‎

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,42 @@ class EnumRequirementTest extends TestCase
2525
publicfunctiontestNotABackedEnum()
2626
{
2727
$this->expectException(InvalidArgumentException::class);
28-
$this->expectExceptionMessage('"Symfony\Component\Routing\Tests\Fixtures\Enum\TestUnitEnum" is not a\BackedEnum class.');
28+
$this->expectExceptionMessage('"Symfony\Component\Routing\Tests\Fixtures\Enum\TestUnitEnum" is not a"BackedEnum" class.');
2929

3030
newEnumRequirement(TestUnitEnum::class);
3131
}
3232

33+
publicfunctiontestCaseNotABackedEnum()
34+
{
35+
$this->expectException(InvalidArgumentException::class);
36+
$this->expectExceptionMessage('Case must be a \BackedEnum instance, "string" given.');
37+
38+
newEnumRequirement(['wrong']);
39+
}
40+
3341
publicfunctiontestCaseFromAnotherEnum()
3442
{
3543
$this->expectException(InvalidArgumentException::class);
3644
$this->expectExceptionMessage('"Symfony\Component\Routing\Tests\Fixtures\Enum\TestStringBackedEnum2::Spades" is not a case of "Symfony\Component\Routing\Tests\Fixtures\Enum\TestStringBackedEnum".');
3745

38-
newEnumRequirement(TestStringBackedEnum::class, TestStringBackedEnum::Diamonds, TestStringBackedEnum2::Spades);
46+
newEnumRequirement([TestStringBackedEnum::Diamonds, TestStringBackedEnum2::Spades]);
3947
}
4048

4149
/**
4250
* @dataProvider provideToString
4351
*/
44-
publicfunctiontestToString(string$expected,string$enum,\BackedEnum ...$cases)
52+
publicfunctiontestToString(string$expected,string|array$cases = [])
4553
{
46-
$this->assertSame($expected, (string)newEnumRequirement($enum, ...$cases));
54+
$this->assertSame($expected, (string)newEnumRequirement($cases));
4755
}
4856

4957
publicfunctionprovideToString()
5058
{
5159
return [
5260
['hearts|diamonds|clubs|spades', TestStringBackedEnum::class],
5361
['10|20|30|40', TestIntBackedEnum::class],
54-
['diamonds|spades', TestStringBackedEnum::class, TestStringBackedEnum::Diamonds, TestStringBackedEnum::Spades],
62+
['diamonds|spades', [TestStringBackedEnum::Diamonds, TestStringBackedEnum::Spades]],
63+
['diamonds', [TestStringBackedEnum::Diamonds]],
5564
['hearts|diamonds|clubs|spa\|des', TestStringBackedEnum2::class],
5665
];
5766
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp