Am două module, fiecare dintre ele definește un serviciu de normalizare
module_one.services.yml
Servicii:
module_one.normalizer.node_entity:
clasa: Drupal\module_one\Normalizer\ModuleOneEntityNormalizer
argumente: ['@entity_type.manager']
Etichete:
- { nume: normalizator, prioritate: 10 }
module_two.services.yml
Servicii:
module_two.normalizer.node_entity:
clasa: Drupal\module_two\Normalizer\ModuleTwoEntityNormalizer
argumente: ['@entity_type.manager']
Etichete:
- { nume: normalizator, prioritate: 10 }
Pentru fiecare modul, creez un normalizator distinct și, probabil, definesc un spațiu de nume separat, de exemplu:
<?php
spațiu de nume Drupal\module_one\Normalizer;
utilizați Drupal\Core\Entity\EntityTypeManagerInterface;
utilizați Drupal\serialization\Normalizer\ContentEntityNormalizer;
utilizați Drupal\node\NodeInterface;
/**
* Convertește structurile obiectului entității Drupal într-o matrice normalizată.
*/
clasa ModuleOneEntityNormalizer extinde ContentEntityNormalizer {
...
Problema este că, cu ambele module activate, un serviciu îl blochează pe celălalt - serializatorul/normalizatorul se declanșează așa cum era de așteptat pentru primul, dar nu pentru al doilea. Singura modalitate de a face ca celălalt să fie recunoscut este de a-i crește prioritatea, dar asta îl blochează pe primul.
Ce îmi lipsește din definițiile care ar împiedica aceste două servicii să intre în conflict unul cu celălalt?
Actualizați: Mulțumesc pentru comentariile cu adevărat utile, începând să apelezi la asta. Ambii normalizatori au aceeași $supportedInterface protejată, de exemplu:
/**
* Interfața sau clasa pe care o acceptă acest Normalizator.
*
* @var șir
*/
protejat $supportedInterfaceOrClass = [
„Drupal\node\NodeInterface”
];
Care este semnalat în Manualul Drupal Serialization API ca o problemă