diff --git a/src/Symfony/Routing/IriConverter.php b/src/Symfony/Routing/IriConverter.php index 7828db05aaf..b74f5565441 100644 --- a/src/Symfony/Routing/IriConverter.php +++ b/src/Symfony/Routing/IriConverter.php @@ -183,6 +183,15 @@ private function generateSymfonyRoute(object|string $resource, int $referenceTyp { $identifiers = $context['uri_variables'] ?? []; + foreach ($identifiers as $identifier) { + if (is_object($identifier)) { + $identifiers = [ + ...$identifiers, + ...$this->identifiersExtractor->getIdentifiersFromItem($identifier, $identifiersExtractorOperation, $context), + ]; + } + } + if (\is_object($resource)) { try { $identifiers = $this->identifiersExtractor->getIdentifiersFromItem($resource, $identifiersExtractorOperation, $context); diff --git a/tests/Functional/Parameters/LinkProviderParameterTest.php b/tests/Functional/Parameters/LinkProviderParameterTest.php index 0288bd0f684..d047a57323d 100644 --- a/tests/Functional/Parameters/LinkProviderParameterTest.php +++ b/tests/Functional/Parameters/LinkProviderParameterTest.php @@ -183,4 +183,24 @@ public function testUriVariableHasDummy(): void 'dummy' => '/dummies/1', ]); } + + public function testCollectionIdIsCorrect(): void + { + $container = static::getContainer(); + if ('mongodb' === $container->getParameter('kernel.environment')) { + $this->markTestSkipped(); + } + + $manager = $this->getManager(); + $dummy = new Dummy(); + $dummy->setName('hi'); + $manager->persist($dummy); + $manager->flush(); + + self::createClient()->request('GET', '/link_parameter_provider_resources/'.$dummy->getId()); + + $this->assertJsonContains([ + '@id' => '/link_parameter_provider_resources/1', + ]); + } }