Я пытаюсь расширить menu_block модуль, позволяющий ему работать с доменами (через домен модуль). Для этого я расширяю МенюБлок класс и пытается получить доступ к домен.переговорщик обслуживание изнутри получить производный идентификатор (). я использую Создайте() способ внедрить сервис и сохранить его в $domainПереговорщик имущество следующим образом:
общедоступная статическая функция create(ContainerInterface $container, массив $configuration, $plugin_id, $plugin_definition) {
$instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->domainNegotiator = $container->get('domain.negotiator');
вернуть $экземпляр;
}
Когда я пытаюсь позвонить $this->domainNegotiator изнутри получить производный идентификатор () Я получаю сообщение об ошибке, в котором говорится, что свойство не существует, и поэтому я не могу получить доступ к его методам. При отладке я смог отследить проблему до MenuBlock::defaultConfiguration() вызов $this->getDerivativeID().
Конфигурация по умолчанию установлена в __конструкт() внутри BlockPluginTrait (называется в БлокБейс), так что в конечном итоге это сводится к тому, что меня вызывают в моем классе Создайте() метод.
Я могу обойти эту проблему, используя не внедренную версию службы в моем получить производный идентификатор () метод, однако это не очень хорошая практика:
$active_domain = \Drupal::service('domain.negotiator')->getActiveDomain();
Есть ли способ внедрить зависимости, чтобы они были доступны перед вызовом родитель::создать() в моем классе Создайте() метод?