Внедрение зависимостей: как перезаписать службу Framework Bundle?

При использовании Пакет фреймворков Symfony 4.2 с Компонент сериализатора существует несколько нормализаторы, автоматически настроенных платформой в определенном порядке.

Я хочу заменить один из этих нормализаторов (ObjectNormalizer) моей личной реализацией (которая является расширением ObjectNormalizer), не касаясь всех других предоставленных нормализаторов или их порядка.

Есть ли способ добиться этого без повторного объявления всех нормализаторов и их порядка в конфигурации Serializer?

Другим вариантом было бы убедиться, что мой пользовательский нормализатор расположен непосредственно перед ObjectNormalizer.

Вы смотрели на добавление прохода компилятора для переопределения компонента symfony.com/doc/current/service_container/compiler_passes.ht‌​ml? Я не знаком с 4 и компонентом сериализатора, но если вы можете получить доступ к нормализатору по имени, вы сможете переопределить его.

N3SS4H 26.03.2019 17:35

Спасибо, насколько я понимаю, это просто добавление нормализаторов в индексированный массив, нет имени для прямой идентификации. Вот поэтому я и спрашиваю, есть ли лучший способ.

LBA 26.03.2019 17:38
Стоит ли изучать 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 нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
2
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Нормализаторы устанавливаются с приоритетом конфигурацией Symfony Framework Bundle. Можно найти перечисленные приоритеты здесь

Зная, что можно определить собственный приоритет для размещения CustomNormalizer там, где это необходимо в service.yaml:

App\Normalizer\MyCustomNormalizer:
    tags:
    - {name: serializer.normalizer, priority: -995}

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