Dynamicky načítany NEON podle modulu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
akadlec
Člen | 1326
+
0
-

Appku mám rozdělenou do několika modulu (front, profil, account,…) a každý z těchto modulů má vlastní config neon kde se definují services a facotries co tento modul používá. Nad těmito configy je pak globánlní config který má v sobě ten zbyte a to co všechny moduly mezi sebou sdíli. Zatím mám config řešený tak že v tom globálním ty jednotlivé configy modulu importuju takže se načte vše i když jsem pravě ve front modulu takže nepotřebuju services co má profile modul.

Dá se nějak udělat aby se načetl config jen pro daný modul? aby to zbytečně nevytvářelo služby a továrničky co nepotřebuje? Nebo není potřeba řešit a změna výkonu bude zanedbatelná?

vvoody
Člen | 910
+
0
-

Konfigurácia nieje nikdy dynamická, ak to potrebuješ tak robíš asi niečo zle. DI kontainer nikdy nevytvára všetky služby uvedené v konfigurácií. Inštancuje len tie, ktoré si pri danom requeste od DIC vyžiadame, takže nemaj žiadne obavy pridať konfigurácie všetkých modulov.

pepakriz
Člen | 246
+
0
-

Loadování configů jednotlivých modulů pomocí sekce includes není moc dobrý nápad. Jednak nelze zadat cestu o adresář výše a dál také nefunguje expanze proměnných. Navíc být závislý na přesné adresářové struktuře není dobrá cesta.

Zkus napsat pro každý modul vlastní CompilerExtension, ten může v sobě config file načítat. Registraci modulu potom provedeš v sekci extensions.

Inspirovat se můžeš zde: https://github.com/…33cbff4e31b9

akadlec
Člen | 1326
+
0
-

@vvoody: tak tou dynamickou konfiguraci jsem měl jen na mysli to že se načte hlavní config a config daného modulu, nic více nic méně, prostě abych při 5ti modulech nemusel načítat v hlavním configu všech 5 modulovych configu z nichž bude využit jen jeden.

@pepakriz: tak s definici cestz o adresář výše či úplně mimo nemám problém. Každý modul má ten config „u sebe“. Extensions se taky dá (asi zkusím) nicméně to bude ve výsledku stejné ne? jen budu muset mít v extensions přidáno loadování jednotlivých modulů, či se pletu?

pepakriz
Člen | 246
+
0
-

@akadlec: Bude to podobné, ale odpadá otázka, „kde se modul nachází?“ Místo toho se řeší jen „Jak se jmenuje třída CompilerExtension?“ a ta se bude jmenovat pořád stejně. Viz: https://forum.nette.org/…e-promennych

Jinak načítat jen některé configy nemá smysl. Při prvním požadavku se sestaví kompletní DIC a při dalších dotazech se jen kontroluje, zda-li nedošlo ke změně configů. V DIC jsou služby volány lazy. Maximálně hrozí, že DIC bude obrovský, ale i tak žádné zásadní zpomalení nehrozí, pokud PHP využívá nějakou opcode cache. Na mém stroji trvá inicializace DIC několik jednotek milisekund.