vendor/api-platform/core/src/JsonLd/Serializer/ObjectNormalizer.php line 37
<?php/** This file is part of the API Platform project.** (c) Kévin Dunglas <dunglas@gmail.com>** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/declare(strict_types=1);namespace ApiPlatform\JsonLd\Serializer;use ApiPlatform\Api\IriConverterInterface;use ApiPlatform\Core\Api\IriConverterInterface as LegacyIriConverterInterface;use ApiPlatform\Exception\InvalidArgumentException;use ApiPlatform\JsonLd\AnonymousContextBuilderInterface;use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface;use Symfony\Component\Serializer\Normalizer\NormalizerInterface;/*** Decorates the output with JSON-LD metadata when appropriate, but otherwise just* passes through to the decorated normalizer.*/final class ObjectNormalizer implements NormalizerInterface, CacheableSupportsMethodInterface{use JsonLdContextTrait;public const FORMAT = 'jsonld';private $decorated;private $iriConverter;private $anonymousContextBuilder;public function __construct(NormalizerInterface $decorated, $iriConverter, AnonymousContextBuilderInterface $anonymousContextBuilder){$this->decorated = $decorated;$this->iriConverter = $iriConverter;$this->anonymousContextBuilder = $anonymousContextBuilder;if ($iriConverter instanceof LegacyIriConverterInterface) {trigger_deprecation('api-platform/core', '2.7', sprintf('Use an implementation of "%s" instead of "%s".', IriConverterInterface::class, LegacyIriConverterInterface::class));}}/*** {@inheritdoc}*/public function supportsNormalization($data, $format = null, array $context = []): bool{return self::FORMAT === $format && $this->decorated->supportsNormalization($data, $format, $context);}/*** {@inheritdoc}*/public function hasCacheableSupportsMethod(): bool{return $this->decorated instanceof CacheableSupportsMethodInterface && $this->decorated->hasCacheableSupportsMethod();}/*** {@inheritdoc}** @return array|string|int|float|bool|\ArrayObject|null*/public function normalize($object, $format = null, array $context = []){if (isset($context['api_resource'])) {$originalResource = $context['api_resource'];unset($context['api_resource']);}/** Converts the normalized data array of a resource into an IRI, if the* normalized data array is empty.** This is useful when traversing from a non-resource towards an attribute* which is a resource, as we do not have the benefit of {@see PropertyMetadata::isReadableLink}.** It must not be propagated to subresources, as {@see PropertyMetadata::isReadableLink}* should take effect.*/$context['api_empty_resource_as_iri'] = true;$data = $this->decorated->normalize($object, $format, $context);if (!\is_array($data) || !$data) {return $data;}if (isset($originalResource)) {try {$context['output']['iri'] = $this->iriConverter instanceof LegacyIriConverterInterface ? $this->iriConverter->getIriFromItem($originalResource) : $this->iriConverter->getIriFromResource($originalResource);} catch (InvalidArgumentException $e) {// The original resource has no identifiers}$context['api_resource'] = $originalResource;}$metadata = $this->createJsonLdContext($this->anonymousContextBuilder, $object, $context);return $metadata + $data;}}class_alias(ObjectNormalizer::class, \ApiPlatform\Core\JsonLd\Serializer\ObjectNormalizer::class);