У меня есть два модуля, каждый из которых определяет службу нормализатора.
module_one.services.yml
Сервисы:
module_one.normalizer.node_entity:
класс: Drupal\module_one\Normalizer\ModuleOneEntityNormalizer
аргументы: ['@entity_type.manager']
теги:
- {имя: нормализатор, приоритет: 10}
module_two.services.yml
Сервисы:
module_two.normalizer.node_entity:
класс: Drupal\module_two\Normalizer\ModuleTwoEntityNormalizer
аргументы: ['@entity_type.manager']
теги:
- {имя: нормализатор, приоритет: 10}
Для каждого модуля я создаю отдельный нормализатор и, предположительно, определяю отдельное пространство имен, например:
<?php
пространство имен Drupal\module_one\Normalizer;
используйте Drupal\Core\Entity\EntityTypeManagerInterface;
используйте Drupal\serialization\Normalizer\ContentEntityNormalizer;
используйте Drupal\node\NodeInterface;
/**
* Преобразует структуры объектов объектов Drupal в нормализованный массив.
*/
класс ModuleOneEntityNormalizer расширяет ContentEntityNormalizer {
...
Проблема в том, что при включении обоих модулей одна служба блокирует другую — сериализатор/нормализатор срабатывает, как и ожидалось, для первого, но не для второго. Единственный способ распознать другой — повысить его приоритет, но это блокирует первый.
Чего мне не хватает в определениях, которые предотвратили бы конфликт этих двух сервисов друг с другом?
Обновлять: Спасибо за действительно полезные комментарии, начинаю набирать номер по этому поводу. Оба нормализатора имеют один и тот же защищенный $supportedInterface, например:
/**
* Интерфейс или класс, который поддерживает этот нормализатор.
*
* @var строка
*/
защищенный $supportedInterfaceOrClass = [
'Друпал\узел\NodeInterface'
];
Который отмечен в Руководство по API сериализации Drupal как проблема