Я работаю над проектом с 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;
}
Да ! Я добавил это в свой пост




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