From 28b69d51758e34ab12e8b5e33be5506bf87ed101 Mon Sep 17 00:00:00 2001 From: Takashi Kanemoto Date: Thu, 30 Oct 2025 14:37:19 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=F0=9F=90=9B=20eliminate=20duplicate?= =?UTF-8?q?=20keys=20in=20the=20constructor=20of=20`Parameters`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Metadata/Parameters.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Metadata/Parameters.php b/src/Metadata/Parameters.php index 2f20937cb64..0bb13dabf70 100644 --- a/src/Metadata/Parameters.php +++ b/src/Metadata/Parameters.php @@ -37,9 +37,13 @@ public function __construct(array $parameters = []) $parameterName = $parameter->getKey(); } - $this->parameters[] = [$parameterName, $parameter]; + $key = \sprintf('%s.%s', $parameter::class, $parameterName); + + $this->parameters[$key] = [$parameterName, $parameter]; } + $this->parameters = array_values($this->parameters); + $this->sort(); } From 05712d334e99ca48658afab71c55a1705d0c2a0c Mon Sep 17 00:00:00 2001 From: Takashi Kanemoto Date: Thu, 30 Oct 2025 16:36:06 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test:=20=F0=9F=92=8D=20add=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Metadata/Tests/ParametersTest.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Metadata/Tests/ParametersTest.php b/src/Metadata/Tests/ParametersTest.php index 6b7b5583390..edc26ff817a 100644 --- a/src/Metadata/Tests/ParametersTest.php +++ b/src/Metadata/Tests/ParametersTest.php @@ -13,6 +13,7 @@ namespace ApiPlatform\Metadata\Tests; +use ApiPlatform\Metadata\HeaderParameter; use ApiPlatform\Metadata\Parameters; use ApiPlatform\Metadata\QueryParameter; use PHPUnit\Framework\TestCase; @@ -25,4 +26,27 @@ public function testDefaultValue(): void $parameters = new Parameters(['a' => $r]); $this->assertSame($r, $parameters->get('a')); } + + public function testDuplicated(): void + { + $r1 = new QueryParameter(key: 'a'); + $r2 = new QueryParameter(key: 'b'); + $r3 = new HeaderParameter(key: 'a'); + $r4 = new HeaderParameter(key: 'b'); + $parameters = new Parameters([$r1, $r2, $r3, $r4]); + $this->assertCount(4, $parameters); + $this->assertSame($r1, $parameters->get('a')); + $this->assertSame($r2, $parameters->get('b')); + $this->assertSame($r3, $parameters->get('a', HeaderParameter::class)); + $this->assertSame($r4, $parameters->get('b', HeaderParameter::class)); + + $r1 = new QueryParameter(key: 'a'); + $r2 = new QueryParameter(key: 'a'); + $r3 = new HeaderParameter(key: 'a'); + $r4 = new HeaderParameter(key: 'a'); + $parameters = new Parameters([$r1, $r2, $r3, $r4]); + $this->assertCount(2, $parameters); + $this->assertSame($r2, $parameters->get('a')); + $this->assertSame($r4, $parameters->get('a', HeaderParameter::class)); + } }