Skip to content

Commit e74e08d

Browse files
committed
fix: Get identifiers from link paramaters objects when generating collection or resource �@id field in json+ld
1 parent 70611b3 commit e74e08d

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

src/Symfony/Routing/IriConverter.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,15 @@ private function generateSymfonyRoute(object|string $resource, int $referenceTyp
183183
{
184184
$identifiers = $context['uri_variables'] ?? [];
185185

186+
foreach ($identifiers as $identifier) {
187+
if (is_object($identifier)) {
188+
$identifiers = [
189+
...$identifiers,
190+
...$this->identifiersExtractor->getIdentifiersFromItem($identifier, $identifiersExtractorOperation, $context),
191+
];
192+
}
193+
}
194+
186195
if (\is_object($resource)) {
187196
try {
188197
$identifiers = $this->identifiersExtractor->getIdentifiersFromItem($resource, $identifiersExtractorOperation, $context);

tests/Functional/Parameters/LinkProviderParameterTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,4 +183,24 @@ public function testUriVariableHasDummy(): void
183183
'dummy' => '/dummies/1',
184184
]);
185185
}
186+
187+
public function testCollectionIdIsCorrect(): void
188+
{
189+
$container = static::getContainer();
190+
if ('mongodb' === $container->getParameter('kernel.environment')) {
191+
$this->markTestSkipped();
192+
}
193+
194+
$manager = $this->getManager();
195+
$dummy = new Dummy();
196+
$dummy->setName('hi');
197+
$manager->persist($dummy);
198+
$manager->flush();
199+
200+
self::createClient()->request('GET', '/link_parameter_provider_resources/'.$dummy->getId());
201+
202+
$this->assertJsonContains([
203+
'@id' => '/link_parameter_provider_resources/1',
204+
]);
205+
}
186206
}

tests/Symfony/Routing/IriConverterTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
use ApiPlatform\State\ProviderInterface;
3232
use ApiPlatform\Symfony\Routing\IriConverter;
3333
use ApiPlatform\Symfony\Routing\SkolemIriConverter;
34+
use ApiPlatform\Tests\Fixtures\TestBundle\ApiResource\LinkParameterProviderResource;
3435
use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Dummy;
3536
use ApiPlatform\Tests\Fixtures\TestBundle\Entity\RelatedDummy;
3637
use PHPUnit\Framework\TestCase;

0 commit comments

Comments
 (0)