Я пытаюсь расширить 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();
Есть ли способ внедрить зависимости, чтобы они были доступны перед вызовом родитель::создать()
в моем классе Создайте()
метод?