ฉันพยายามที่จะขยาย เมนู_บล็อก โมดูลเพื่ออนุญาตให้ทำงานกับโดเมน (ผ่าน โดเมน โมดูล). ในการทำเช่นนี้ฉันกำลังขยาย MenuBlock ชั้นเรียนและพยายามเข้าถึง โดเมน.negotiator บริการจากภายใน getDerivativeID(). ฉันกำลังใช้ สร้าง() วิธีการฉีดบริการและจัดเก็บไปยัง $domainNegotiator คุณสมบัติดังนี้
การสร้างฟังก์ชันสแตติกสาธารณะ (ContainerInterface $container, อาร์เรย์ $configuration, $plugin_id, $plugin_definition) {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->domainNegotiator = $container->get('domain.negotiator');
ส่งคืนอินสแตนซ์ $;
}
เมื่อฉันพยายามโทร $this->domainNegotiator จากภายใน getDerivativeID() ฉันได้รับข้อผิดพลาดที่ระบุว่าไม่มีพร็อพเพอร์ตี้ ดังนั้นฉันจึงไม่สามารถเข้าถึงเมธอดได้ ในการดีบัก ฉันสามารถติดตามปัญหาไปที่ MenuBlock::defaultConfiguration() โทร $this->getDerivativeID().
การกำหนดค่าเริ่มต้นถูกตั้งค่าใน __สร้าง() ข้างใน ลักษณะเด่นของปลั๊กอินบล็อก (อินโทร บล็อกเบส) ในที่สุดมันก็เดือดจนถูกเรียกในชั้นเรียนของฉัน สร้าง() กระบวนการ.
ฉันสามารถแก้ไขปัญหานี้ได้โดยใช้บริการเวอร์ชันที่ไม่ได้ฉีดในไฟล์ของฉัน getDerivativeID() วิธีการ แต่นี่ไม่ใช่วิธีปฏิบัติที่ดี:
$active_domain = \Drupal::service('domain.negotiator')->getActiveDomain();
มีวิธีฉีดการพึ่งพาเพื่อให้พร้อมใช้งานก่อนโทรหรือไม่ ผู้ปกครอง :: สร้าง () ในชั้นเรียนของฉัน สร้าง() กระบวนการ?