Skip to content

Commit f412346

Browse files
authored
fix(jsonld): anonymous context hydra_prefix value (#6873)
fixes #6810
1 parent 9d0f030 commit f412346

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

ContextBuilder.php

+12-6
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,24 @@ public function getResourceContextUri(string $resourceClass, ?int $referenceType
115115
public function getAnonymousResourceContext(object $object, array $context = [], int $referenceType = UrlGeneratorInterface::ABS_PATH): array
116116
{
117117
$outputClass = $this->getObjectClass($object);
118-
$operation = $context['operation'] ?? new Get(shortName: (new \ReflectionClass($outputClass))->getShortName());
118+
$operation = $context['operation'] ?? new Get(
119+
shortName: (new \ReflectionClass($outputClass))->getShortName(),
120+
normalizationContext: [
121+
self::HYDRA_CONTEXT_HAS_PREFIX => $context[self::HYDRA_CONTEXT_HAS_PREFIX] ?? $this->defaultContext[self::HYDRA_CONTEXT_HAS_PREFIX] ?? true,
122+
'groups' => [],
123+
],
124+
denormalizationContext: [
125+
'groups' => [],
126+
]
127+
);
119128
$shortName = $operation->getShortName();
120129

121130
$jsonLdContext = [
122131
'@context' => $this->getResourceContextWithShortname(
123132
$outputClass,
124133
$referenceType,
125-
$shortName
134+
$shortName,
135+
$operation
126136
),
127137
'@type' => $shortName,
128138
];
@@ -184,10 +194,6 @@ private function getResourceContextWithShortname(string $resourceClass, int $ref
184194
}
185195
}
186196

187-
if (false === ($this->defaultContext[self::HYDRA_CONTEXT_HAS_PREFIX] ?? true)) {
188-
return [HYDRA_CONTEXT, $context];
189-
}
190-
191197
return $context;
192198
}
193199
}

Serializer/JsonLdContextTrait.php

+9-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace ApiPlatform\JsonLd\Serializer;
1515

1616
use ApiPlatform\JsonLd\AnonymousContextBuilderInterface;
17+
use ApiPlatform\JsonLd\ContextBuilder;
1718
use ApiPlatform\JsonLd\ContextBuilderInterface;
1819

1920
/**
@@ -49,13 +50,19 @@ private function addJsonLdContext(ContextBuilderInterface $contextBuilder, strin
4950

5051
private function createJsonLdContext(AnonymousContextBuilderInterface $contextBuilder, $object, array &$context): array
5152
{
53+
$anonymousContext = ($context['output'] ?? []) + ['api_resource' => $context['api_resource'] ?? null];
54+
55+
if (isset($context[ContextBuilder::HYDRA_CONTEXT_HAS_PREFIX])) {
56+
$anonymousContext[ContextBuilder::HYDRA_CONTEXT_HAS_PREFIX] = $context[ContextBuilder::HYDRA_CONTEXT_HAS_PREFIX];
57+
}
58+
5259
// We're in a collection, don't add the @context part
5360
if (isset($context['jsonld_has_context'])) {
54-
return $contextBuilder->getAnonymousResourceContext($object, ($context['output'] ?? []) + ['api_resource' => $context['api_resource'] ?? null, 'has_context' => true]);
61+
return $contextBuilder->getAnonymousResourceContext($object, ['has_context' => true] + $anonymousContext);
5562
}
5663

5764
$context['jsonld_has_context'] = true;
5865

59-
return $contextBuilder->getAnonymousResourceContext($object, ($context['output'] ?? []) + ['api_resource' => $context['api_resource'] ?? null]);
66+
return $contextBuilder->getAnonymousResourceContext($object, $anonymousContext);
6067
}
6168
}

0 commit comments

Comments
 (0)