Я хотел бы украсить ArrayDenormalizer для сериализатора Symfony пользовательским Denormalizer, но, похоже, он сталкивается с проблемой циклической ссылки в DependencyInjection, поскольку Nginx падает с ошибкой 502.
Пользовательский Denormalizer реализует DenormalizerAwareInterface, поэтому я действительно ожидал, что Symfony будет автоматически обрабатывать внедрение зависимостей через Autowiring.
<?php
namespace App\Serializer;
use App\MyEntity;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareTrait;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
class PreCheckRequestDenormalizer implements DenormalizerInterface, DenormalizerAwareInterface
{
use DenormalizerAwareTrait;
public function denormalize(mixed $data, string $type, string $format = null, array $context = [])
{
if (in_array($data['locale'], ['de', 'en']) === false) {
$data['locale'] = 'en';
}
return $this->denormalizer->denormalize($data, $type, $format, $context);
}
public function supportsDenormalization(mixed $data, string $type, string $format = null)
{
return is_array($data) && $type === MyEntity::class;
}
}
Что мне здесь не хватает? Кстати, это Symfony 6.1.




Похоже, это ошибка автоподключения NormalizeAwareInterface в Symfony 6.1: https://github.com/symfony/maker-bundle/issues/1252#issuecomment-1342478104
Эта ошибка привела к проблеме циклической ссылки.
Я решил это, не используя DenormalizerAwareInterface и DenormalizerAwareTrait, а также отключив автопроводку для пользовательского Denormalizer и явно объявив службу:
App\Serializer\PreCheckRequestDenormalizer:
autowire: false
arguments:
$denormalizer: '@serializer.normalizer.object'
$allowedLocales: '%app.allowed_locales%'
$defaultLocale: '%env(string:DEFAULT_LOCALE)%'
Комментарии к проблеме описывают возможные другие способы, но это решает это для меня.