Пользовательский денормализатор Symfony Serializer

Я хотел бы украсить 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.

Стоит ли изучать 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
0
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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)%'

Комментарии к проблеме описывают возможные другие способы, но это решает это для меня.

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