Нормализатор с платформой API: невозможно сгенерировать IRI для элемента типа

Я работаю над проектом с Symfony и платформой Api и думаю, что что-то упускаю из процесса сериализации.

У меня есть объект AccessCode с конечной точкой для POST и другой для GET всех кодов. Я создал AccessCodeNormalizer для форматирования своих данных. Это работает для метода получения, и мои данные в порядке, но у меня проблема с POST «Невозможно сгенерировать IRI для элемента типа AccessCode».

Вот мои конечные точки:

#[ApiResource(
    operations: [
        new GetCollection(
            uriTemplate: '/operations/{operationId}/access-codes',
            uriVariables: ['operationId' => new Link(toProperty: 'operation', fromClass: Operation::class)],
            status: 200,
            normalizationContext: ['groups' => ['code:read:bo', 'lifecycle']]
        ),
        new Post(
            uriTemplate: '/operations/{operationId}/access-code',
            uriVariables: ['operationId' => new Link(toProperty: 'operation', fromClass: Operation::class)],
            input: AccessCodeDto::class,
            provider: ObjectProvider::class, // added a provider to avoid Doctrine to try to fetch something that does not exist
            processor: AccessCodeProcessor::class
        )
    ]
)]

И вот мой нормализатор:

class AccessCodeNormalizer implements NormalizerInterface
{
    public function __construct(
        private EntityManagerInterface $entityManager,
        private AccessCodeUtils $accessCodeUtils,
        private ObjectNormalizer $normalizer
    ) {
    }

    public function normalize($object, string $format = null, array $context = [])
    {
        $object->setCode($this->accessCodeUtils->formatAccessCode($this->accessCodeUtils->decryptAccessCode($object->getCode(), $this->accessCodeUtils->decodeIv($object->getIv()))));

        return $this->normalizer->normalize($object, $format, $context);
    }

    public function supportsNormalization($data, string $format = null, array $context = [])
    {
        return $data instanceof AccessCode;
    }
}

Когда я сбрасываю свой идентификатор AccessCode в нормализатор, у меня нет проблем, и он правильно сбрасывается в базу данных.

AccessCodeDto:

namespace App\BackOffice\Dto;

class AccessCodeDto
{
    public ?int $amount = null;
    public ?string $wallet = null;
    public array $participantInfos;
}

Можете ли вы опубликовать свой AccessCodeDto?

Dylan KAS 16.05.2024 11:25

Да ! Я добавил это в свой пост

Skyshufeu 16.05.2024 13:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
2
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец-то я нашел ответ на этот вопрос. Я переместил конечную точку POST из своей сущности в свой AccessCodeDto, и ответ нормализуется правильно и без ошибок.

Мне любопытно узнать, почему это не работает с объектом, если кто-нибудь понимает, откуда может возникнуть ошибка.

Другие вопросы по теме