Î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ă?