ฉันพยายามที่จะขยาย เมนู_บล็อก
โมดูลเพื่ออนุญาตให้ทำงานกับโดเมน (ผ่าน โดเมน
โมดูล). ในการทำเช่นนี้ฉันกำลังขยาย 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();
มีวิธีฉีดการพึ่งพาเพื่อให้พร้อมใช้งานก่อนโทรหรือไม่ ผู้ปกครอง :: สร้าง ()
ในชั้นเรียนของฉัน สร้าง()
กระบวนการ?