ฉันกำลังเขียน EventSubscriber สำหรับเอนทิตีการกำหนดค่าของโมดูลโดเมน เป้าหมายของฉันคือการแทรกข้อมูลบางอย่างในการกำหนดค่าในเหตุการณ์ preSave (กลายเป็นจากโปรแกรมแก้ไขสำหรับ D9)
นี่คือรหัสของฉันจากคลาส ConfigEventSubscriber ของโมดูลที่กำหนดเองของฉัน:
เนมสเปซ Drupal\custom_module\EventSubscriber;
ใช้ Drupal\Core\Config\ConfigCrudEvent
ใช้ Drupal\Core\Config\ConfigEvents;
ใช้ Drupal\domain\Entity\Domain;
ใช้ Symfony\Component\EventDispatcher\EventSubscriberInterface;
ConfigEventSubscriber คลาสใช้ EventSubscriberInterface {
ฟังก์ชั่นสาธารณะ __construct (โดเมน $ โดเมน) {
$this->domain = $โดเมน;
}
/**
* {@inheritdoc}
*
* @return อาร์เรย์
* ชื่อเหตุการณ์ที่จะฟังและวิธีการที่ควรดำเนินการ
*/
ฟังก์ชั่นคงที่สาธารณะ getSubscribedEvents () {
กลับ [
ConfigEvents::PRESAVE => 'configPreSave'
];
}
/**
* ตอบสนองต่อวัตถุ config ที่กำลังบันทึก
*
* @param \Drupal\Core\Config\ConfigCrudEvent $event
* กำหนดค่าเหตุการณ์ crud
*/
ฟังก์ชั่นสาธารณะ configPreSave (ConfigCrudEvent $event) {
$config = $event->getConfig();
$domain_id = $config->getOriginal('id');
ถ้า ($config->getStorage()->listAll('domain.record.')) {
$this->domain->addDependencyTrait('โมดูล', 'country_path');
$this->domain->setThirdPartySetting('country_path', 'domain_path', $domain_id);
}
}
}
นี่คือไฟล์ services.yml ของฉัน:
บริการ:
Drupal\custom_module\EventSubscriber\ConfigEventSubscriber:
แท็ก:
- { ชื่อ: 'event_subscriber' }
อาร์กิวเมนต์: ['@domain.element_manager']
มันส่งข้อผิดพลาดที่อินสแตนซ์ของ DomainElementManager กำหนด แต่เอนทิตีของโดเมนคาดไว้และมันก็สมเหตุสมผล เท่าที่ฉันรวมอินสแตนซ์ $domain ของโดเมนไว้ในโครงสร้างของฉัน แต่ฉันต้องการคลาสโดเมนเพื่อใช้วิธีการเหล่านี้:
เพิ่มการพึ่งพา setThirdPartySettings
ดังนั้น คำถามของฉันคือจะใช้วิธีการเหล่านี้อย่างถูกต้องในบริบทของงานของฉันได้อย่างไร
ความช่วยเหลือใด ๆ ที่ชื่นชม