Skip to content

Commit

Permalink
fix: Ignore context resource_class when it is an interface or an abst…
Browse files Browse the repository at this point in the history
…ract class. Fixes api-platform#6251
  • Loading branch information
ambroisemaupate committed Apr 3, 2024
1 parent 93f8b5f commit 000def0
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion src/JsonLd/Serializer/ItemNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,20 @@ public function normalize(mixed $object, ?string $format = null, array $context
// TODO: we should not remove the resource_class in the normalizeRawCollection as we would find out anyway that it's not the same as the requested one
$previousResourceClass = $context['resource_class'] ?? null;
$metadata = [];
if ($isResourceClass = $this->resourceClassResolver->isResourceClass($resourceClass) && (null === $previousResourceClass || $this->resourceClassResolver->isResourceClass($previousResourceClass))) {
$isResourceClass = $this->resourceClassResolver->isResourceClass($resourceClass);

/*
* Ignore context resource class if it's an abstract class or an interface
* and the current object is a resource class.
*/
if (null !== $previousResourceClass && $isResourceClass) {
$previousResourceClassReflection = new \ReflectionClass($previousResourceClass);
if ($previousResourceClassReflection->isAbstract() || $previousResourceClassReflection->isInterface()) {
$previousResourceClass = null;
}
}

if ($isResourceClass && (null === $previousResourceClass || $this->resourceClassResolver->isResourceClass($previousResourceClass))) {
$resourceClass = $this->resourceClassResolver->getResourceClass($object, $previousResourceClass);
$context = $this->initContext($resourceClass, $context);
$metadata = $this->addJsonLdContext($this->contextBuilder, $resourceClass, $context);
Expand Down

0 comments on commit 000def0

Please sign in to comment.