Score:0

จะใช้วิธีการจากคลาสเอนทิตีได้อย่างไรหากไม่มีบริการดังกล่าว

ธง ng

ฉันกำลังเขียน 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

ดังนั้น คำถามของฉันคือจะใช้วิธีการเหล่านี้อย่างถูกต้องในบริบทของงานของฉันได้อย่างไร

ความช่วยเหลือใด ๆ ที่ชื่นชม

beltouche avatar
cn flag
หากคุณไม่สามารถรับโดเมนโดยตรงเป็นบริการได้ คุณสามารถรับจากบริการที่มีอยู่ได้หรือไม่ เช่น ถ้าตัวจัดการโดเมนมีเมธอด `getDomain()` คุณสามารถเขียนคลาสของคุณใหม่เพื่อแทรกตัวจัดการและดึงโดเมนในตัวสร้างออกมา
Yaroslav avatar
ng flag
น่าเสียดายที่มันไม่มีวิธีการดังกล่าว วิธีการนี้มีอยู่ใน DomainAliasInterface แต่ไม่ได้ประกาศไว้ใน services.yml ของโมดูลด้วย
4uk4 avatar
cn flag
แม้ว่าคุณจะไม่มีเมธอดของเอนทิตีโดเมนที่โหลดโดยสมบูรณ์ คุณก็ยังสามารถรับและตั้งค่าการกำหนดค่าทั้งหมด รวมถึงการตั้งค่าของบุคคลที่สาม: `$config->get('third_party_settings')`
Yaroslav avatar
ng flag
ขอบคุณ มันช่วยฉันได้มาก ฉันใช้วิธี $config->set() และพุชข้อมูลที่จำเป็น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา