Tôi đang cố gắng mở rộng menu_block
mô-đun để cho phép nó hoạt động với các miền (thông qua miền
mô-đun). Để làm được điều này, tôi đang mở rộng Thực đơnKhối
lớp và cố gắng truy cập vào domain.negotiator
dịch vụ từ bên trong getDerivativeID()
. tôi đang sử dụng tạo ra()
phương pháp để tiêm dịch vụ và lưu trữ nó vào một $domainNhà đàm phán
tài sản như sau:
tạo hàm tĩnh công khai (ContainerInterface $container, mảng $configuration, $plugin_id, $plugin_definition) {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->domainNegotiator = $container->get('domain.negotiator');
trả lại cá thể $;
}
Khi tôi cố gắng gọi $this->domainNegotiator
từ bên trong getDerivativeID()
Tôi gặp lỗi cho biết thuộc tính không tồn tại và do đó tôi không thể truy cập các phương thức trên đó. Khi gỡ lỗi, tôi có thể theo dõi vấn đề MenuBlock::defaultConfiguration()
kêu gọi $this->getDerivativeID()
.
Cấu hình mặc định được đặt trong __xây dựng()
phía trong KhốiPluginTrait
(được gọi vào Khối cơ sở
), vì vậy cuối cùng nó dẫn đến việc được gọi trong lớp của tôi tạo ra()
phương pháp.
Tôi có thể khắc phục sự cố này bằng cách sử dụng phiên bản dịch vụ không được tiêm trong getDerivativeID()
phương pháp, tuy nhiên đây không phải là một phương pháp hay:
$active_domain = \Drupal::service('domain.negotiator')->getActiveDomain();
Có cách nào để chèn các phụ thuộc để chúng có sẵn trước khi gọi không cha mẹ::tạo()
trong lớp học của tôi tạo ra()
phương pháp?