Automatická registrace extensions

baraja
Nette Blogger | 29
+
-4
-

Ahoj,

často instaluji a vyvíjím různé balíčky a napadlo mě, že by Nette mohlo umět automaticky zaregistrovat zvolený typ extensions.

Jako tvůrce balíčku si to představuji tak, že bych implementovat Extension třídu, která bude dědit například nějakou abstraktní třídu AutomaticRegisterExtension (nebo klidně interface), která by následně dědila klasickou třídu CompilerExtension.

Když si pak vývojář nainstaluje nový balíček přes Composer, tak se mu díky extension automaticky zaregistrují všechny služby a sama předkonfiguruje aplikace a už nemusím vědět, že je potřeba něco ručně editovat v Neon souboru. Pokud by extension vyžadovala nějaké parametry, tak se klasicky vyhodí výjimka, jako vývojář to hned zjistím a parametry podle validací z Nette Schema doplním.

Nyní tento problém obcházím přes balíček Package Manager, ale toto řešení mi přijde nevhodné, protože by to DI mohlo umět už od přírody.

DI by mohlo při kompilaci hledat extensions v adresáři „app“ a „vendor“ rekurzivně přes RobotLoader. Název extension (pro potřeby definice parametrů v Neonu) by mohlo vracet přímo extension v nějaké metodě, kterou si specifická abstraktní třída (nebo spíše interface) vyžádá.

@DavidGrudl Dává ti podobné chování smysl? Při práci na hodně projektech, kde potřebuji řešit hodně extensions (které navíc nemají prakticky nikdy parametry) by toto pomohlo vývojářům hodně s efektivitou a zbavíme se řady návodů v dokumentacích konkrétních balíčků.

Díky moc.

Felix
Nette Core | 1137
+
0
-

Ahoj,

chapu tvuj zamer, nekolikrat jsem o tom premyslel take. Ale dospel jsem k zaveru, ze to vlastne neni dobry napad.

Z hlavy me napada par veci, kvuli kterym jsem to neudelal.

  1. Balicek pouzivam/nepouzivam, napr.:
    1. Balicek nechci pouzivat, ale mam ho v composeru.
    2. Balicek chci pouzivat, ale ne pres extension.
    3. Balicek chci pouzivat, ale jenom pro testy.
  2. V ramci jedne code base, jednoho composer.json, mam vice aplikaci.

U tebou zmineneho Package Manager prave vidim vyhodu v tom, ze nemusis mit stejny use-case jako ja a tudiz chces mit vsechny balicky registrovane.

baraja
Nette Blogger | 29
+
0
-

Aha, použití třeba v testech nebo nějaké ruční instancování mě vůbec nenapadlo (k čemu to vůbec je v praxi potřeba?).

Přemýšlím o tom, jak v redakčním systému umožnit uživatelům co nejvíc zpříjemnit instalaci pluginů a je pravda, že to asi přímo do Nette nepatří a bude lepší na to mít nějakou vlastní logiku.

Moc děkuji.