Propojení rozšíření mezi sebou

Gappa
Nette Blogger | 198
+
0
-

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)