Jak zaregistrovat routovací pravidlo dynamicky v extension?

baraja
Nette Blogger | 29
+
+1
-

Ahoj,

v Nette vyvíjím už strašně dlouho a zrovna pro routing používám různé hacky a zajímalo by mě, jestli jde toto řešit nějak lépe inteligentně. Nyní to řeším vygenerováním kódu do DIC, který se v každém requestu vyhodnotí a případně zavolá nějakou mojí službu, která potom request zpracuje a stránku zabije pro další zpracování.

Chci například publikovat veřejný Composer balíček, který vnitřně definuje Extension, která do DIC zkompiluje routu, kterou se pak něco někde zobrazí.

Použití pak existuje celá řada, jako například:

  • REST API
  • administrační rozhraní
  • platební brána (co má vlastní Latte šablonku s formulářem pro uživatele)
  • generátor obrázků
  • robots.txt generator
  • sitemap.xml generator
  • dokumentace

prostě různé logiky, které chci umístit na vlastní rezervovanou URL a zároveň mi přijde zbytečné kvůli tomu nutit vývojáře ručně definovat routu a pak to někde provolávat v Presenteru i přesto, že by si to mohl řešit balíček sám.

Pokud tato věc v Nette přímo není a dává vám smysl, rád bych to implementoval jako dvojici polí, přičemž by se routa mohla zaregistrovat pro zpracování před RouterFactory (třeba logika pro API), nebo se zkusí až když RouterFactory nic nenajde (například pro sitemapu, obrázky a podobně).

Fungovat by to mohl klidně tak, že by balíček přímo v sobě obsahoval určitou zjednodušenou formu presenteru (něco jako MicroPresenter), který by nepatřil do žádného modulu a routoval by se takto napřímo. V Tracy panelu by se pak tyto routy zobrazovaly běžným způsobem, akorát místo modulu by bylo uvedeno, že jde o speciální typ routy na neprojektový obsah.

Předem moc děkuji za všechny nápady, jak toto řešit.