vendor/api-platform/core/src/Hydra/Serializer/EntrypointNormalizer.php line 46
<?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\Hydra\Serializer;use ApiPlatform\Api\Entrypoint;use ApiPlatform\Api\IriConverterInterface;use ApiPlatform\Api\UrlGeneratorInterface;use ApiPlatform\Core\Api\IriConverterInterface as LegacyIriConverterInterface;use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;use ApiPlatform\Core\Metadata\Resource\ResourceMetadata;use ApiPlatform\Exception\InvalidArgumentException;use ApiPlatform\Exception\OperationNotFoundException;use ApiPlatform\Metadata\CollectionOperationInterface;use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface;use ApiPlatform\Metadata\Resource\ResourceMetadataCollection;use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface;use Symfony\Component\Serializer\Normalizer\NormalizerInterface;/*** Normalizes the API entrypoint.** @author Kévin Dunglas <dunglas@gmail.com>*/final class EntrypointNormalizer implements NormalizerInterface, CacheableSupportsMethodInterface{public const FORMAT = 'jsonld';private $resourceMetadataFactory;private $iriConverter;private $urlGenerator;public function __construct($resourceMetadataFactory, $iriConverter, UrlGeneratorInterface $urlGenerator){if ($iriConverter instanceof LegacyIriConverterInterface) {trigger_deprecation('api-platform/core', '2.7', sprintf('Use an implementation of "%s" instead of "%s".', IriConverterInterface::class, LegacyIriConverterInterface::class));}$this->iriConverter = $iriConverter;if (!$resourceMetadataFactory instanceof ResourceMetadataCollectionFactoryInterface) {trigger_deprecation('api-platform/core', '2.7', sprintf('Use "%s" instead of "%s".', ResourceMetadataCollectionFactoryInterface::class, ResourceMetadataFactoryInterface::class));}$this->resourceMetadataFactory = $resourceMetadataFactory;$this->urlGenerator = $urlGenerator;}/*** {@inheritdoc}*/public function normalize($object, $format = null, array $context = []): array{$entrypoint = ['@context' => $this->urlGenerator->generate('api_jsonld_context', ['shortName' => 'Entrypoint']),'@id' => $this->urlGenerator->generate('api_entrypoint'),'@type' => 'Entrypoint',];foreach ($object->getResourceNameCollection() as $resourceClass) {/** @var ResourceMetadata|ResourceMetadataCollection */$resourceMetadata = $this->resourceMetadataFactory->create($resourceClass);if ($resourceMetadata instanceof ResourceMetadata) {if (empty($resourceMetadata->getCollectionOperations())) {continue;}try {$entrypoint[lcfirst($resourceMetadata->getShortName())] = $this->iriConverter->getIriFromResourceClass($resourceClass);} catch (InvalidArgumentException $ex) {// Ignore resources without GET operations}continue;}foreach ($resourceMetadata as $resource) {if ($resource->getExtraProperties()['is_alternate_resource_metadata'] ?? false) {continue;}foreach ($resource->getOperations() as $operationName => $operation) {$key = lcfirst($resource->getShortName());if (!$operation instanceof CollectionOperationInterface || isset($entrypoint[$key])) {continue;}try {$entrypoint[$key] = $this->iriConverter instanceof LegacyIriConverterInterface ? $this->iriConverter->getIriFromResourceClass($resourceClass) : $this->iriConverter->getIriFromResource($resourceClass, UrlGeneratorInterface::ABS_PATH, $operation);} catch (InvalidArgumentException|OperationNotFoundException $ex) {// Ignore resources without GET operations}}}}ksort($entrypoint);return $entrypoint;}/*** {@inheritdoc}*/public function supportsNormalization($data, $format = null, array $context = []): bool{return self::FORMAT === $format && $data instanceof Entrypoint;}/*** {@inheritdoc}*/public function hasCacheableSupportsMethod(): bool{return true;}}class_alias(EntrypointNormalizer::class, \ApiPlatform\Core\Hydra\Serializer\EntrypointNormalizer::class);