Propojení rozšíření mezi sebou
- Gappa
- Nette Blogger | 208
Ahoj,
řeším jak nejlépe propojit dvě (nebo více) rozšíření mezi sebou.
Jde o situace typu „rozšíření A, které, pokud je přítomné rozšíření B, se bude chovat jinak“, což by v praxi mohlo být „pokud je přítomné rozšíření Gallery, pak rozšíření Article bude umožňovat vytvoření galerií ke článku, přidá tlačítka s odkazy atp.“.
Zatím jsem to vymyslel nějak takle:
use Nette\DI\CompilerExtension
final class FirstExtension extends CompilerExtension
{
...
public function afterCompile(ClassType $class): void
{
parent::afterCompile($class);
$builder = $this->getContainerBuilder();
$init = $class->getMethod('initialize');
$init->addBody('$this->getService(?)->setSecondExtensionInstalled(?);', [
$this->prefix('config'),
(bool) $builder->getByType(SomeSecondExtensionService::class),
]);
}
}
Config je služba z prvního rozšíření. Dotazuji se na existenci služby z druhého rozšíření, což je sice funkční, ale nepřijde mi to jako nejlepší nápad.
Jde to nějak líp? :)
Díky za podněty.
Editoval Gappa (29. 3. 2021 22:04)