Încerc să extind meniu_bloc modul pentru a-i permite să lucreze cu domenii (prin intermediul domeniu modul). Pentru a face acest lucru, extind MenuBlock clasa și încercând să acceseze domeniu.negociator serviciu din interior getDerivativeID(). Eu folosesc crea() metoda de a injecta serviciul și de a-l stoca la a $domainNegotiator proprietate după cum urmează:
funcția publică statică create(ContainerInterface $container, matrice $configurație, $plugin_id, $plugin_definition) {
$instanta = parent::create($container, $configuration, $plugin_id, $plugin_definition);
$instance->domainNegotiator = $container->get('domain.negotiator');
returnare $instanță;
}
Când încerc să sun $this->domainNegotiator din cadrul getDerivativeID() Primesc o eroare care afirmă că proprietatea nu există și, prin urmare, nu pot accesa metode de pe ea. În depanare, am putut urmări problema până la MenuBlock::defaultConfiguration() chemând $this->getDerivativeID().
Configurația implicită este setată __construi() interior BlockPluginTrait (a sunat BlockBase), așa că în cele din urmă se reduce la a fi chemat în clasa mea crea() metodă.
Pot să rezolv această problemă utilizând o versiune neinjectată a serviciului în mine getDerivativeID() metoda, cu toate acestea, aceasta nu este o practică grozavă:
$domeniu_activ = \Drupal::service('domeniu.negotiator')->getActiveDomain();
Există o modalitate de a injecta dependențe, astfel încât acestea să fie disponibile înainte de a suna parent::create() în clasa mea crea() metodă?