From 5b35943aa19459fa1065358e41f4811b529aa182 Mon Sep 17 00:00:00 2001 From: Morgan Abraham Date: Sun, 9 Nov 2025 21:14:37 +0100 Subject: [PATCH] fix(serializer): properly handle read link parameters when generating iris --- src/Symfony/Routing/IriConverter.php | 9 +++++++++ .../Parameters/LinkProviderParameterTest.php | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+) 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', + ]); + } }