ฉันมีสองโมดูล ซึ่งแต่ละโมดูลกำหนดบริการนอร์มอลไลเซอร์
module_one.services.yml
บริการ:
module_one.normalizer.node_entity:
คลาส: Drupal\module_one\Normalizer\ModuleOneEntityNormalizer
ข้อโต้แย้ง: ['@entity_type.manager']
แท็ก:
- { ชื่อ: normalizer, ลำดับความสำคัญ: 10 }
module_two.services.yml
บริการ:
module_two.normalizer.node_entity:
คลาส: Drupal\module_two\Normalizer\ModuleTwoEntityNormalizer
ข้อโต้แย้ง: ['@entity_type.manager']
แท็ก:
- { ชื่อ: normalizer, ลำดับความสำคัญ: 10 }
สำหรับแต่ละโมดูล ฉันกำลังสร้าง Normalizer ที่แตกต่างกันและน่าจะกำหนดเนมสเปซแยกต่างหาก เช่น:
<?php
เนมสเปซ Drupal\module_one\Normalizer;
ใช้ Drupal\Core\Entity\EntityTypeManagerInterface;
ใช้ Drupal\serialization\Normalizer\ContentEntityNormalizer;
ใช้ Drupal\node\NodeInterface;
/**
* แปลงโครงสร้างวัตถุเอนทิตี Drupal เป็นอาร์เรย์มาตรฐาน
*/
คลาส ModuleOneEntityNormalizer ขยาย ContentEntityNormalizer {
...
ปัญหาคือเมื่อเปิดใช้งานทั้งสองโมดูล บริการหนึ่งจะปิดกั้นอีกบริการหนึ่ง - serializer / normalizer จะเริ่มทำงานตามที่คาดไว้สำหรับอันแรก แต่ไม่ใช่สำหรับอันที่สอง วิธีเดียวที่จะทำให้อีกอันเป็นที่รู้จักคือเพิ่มลำดับความสำคัญ แต่นั่นจะบล็อกอันแรก
ฉันขาดอะไรในคำจำกัดความที่จะป้องกันไม่ให้บริการทั้งสองนี้ขัดแย้งกัน
อัปเดต: ขอบคุณสำหรับความคิดเห็นที่เป็นประโยชน์จริง ๆ เริ่มโทรเข้ามาในเรื่องนี้ Normalizer ทั้งสองมี $supportedInterface ที่ป้องกันเหมือนกัน เช่น:
/**
* อินเทอร์เฟซหรือคลาสที่ Normalizer นี้รองรับ
*
* @var สตริง
*/
ป้องกัน $supportedInterfaceOrClass = [
'Drupal\node\NodeInterface'
];
ซึ่งถูกตั้งค่าสถานะไว้ใน คู่มือ Drupal Serialization API เป็นประเด็น