Routování modulů na domény 3. a vyššího řádu

theo
Člen | 57
+
0
-

Řeším aplikaci, která má 5 modulů (dvě různá API, administrace, frontend, CLI rozhraní) a toto dělení by se mělo promítnout i do doménových jmen, pod kterými jsou tyto moduly dostupné. Na to bych si měl asi vystačit s postupy uvedenými v dokumentaci. Potíž je v tom, že moje aplikace běží na doméně třetího řádu (mes.firma.cz) a když chci aby např. API bylo na customer.api.mes.firma.cz, tak už jsem s postupy uvedenými v dokumentaci narazil. Používám nette/application 3.1.

Aplikace má tuto strukturu, v závorce uvedenými doménovými jmény bych je chtěl mít naroutované:

- app
  +- Modules
  |  +- Admin (admin.mes.firma.cz)
  |  +- Api
  |  |  + Customer (customer.api.mes.firma.cz)
  |  |  + Device (device.api.mes.firma.cz)
  |  +- Cli
  |  +- Public (mes.firma.cz)
  +- Models
  +- ...

Zkoušel jsem podle dokumentace postavit v routeru různé kombinace withDomain() a withModule() spolu s různě nastavenými cestami, ale nejlepší čeho jsem byl schopen dosáhnout byla situace, kdy na doménách fungovaly jednotlivé moduly aplikace, ale i explicitní odkazy na jiné moduly (např. link('//:Admin:Sign:in')) měly sice správně absolutní část cesty, ale doménová část cesty chyběla (takže např. namísto na http://admin.mes.firma.cz/sign/in odkazovaly na /sign/in).

Samozřejmě mě napadlo napsat si vlastní router (a je to pro mě stále poslední možnost), na druhou stranu chtěl jsem se někoho zkušenějšího zeptat, jestli to skutečně nejde vyřešit se základním routerem, který mi jinak připadá na tento úkol vcelku dobře vybaven. Pokud ano, mohl by mi někdo uvést příklad kódu routeru, který by toto vyřešil, nebo odkaz na něj? Z googlu jsem vyrazil celou řadu postupů, ale zdá se mi, že žádný z nich tak úplně nesedí na tento případ.

Pepino
Člen | 256
+
0
-

Nevím, zda úplně rozumím, ale do routy můžeš napasovat i doménovou část. Např.:

$router = new RouteList();
$router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('//admin.mes.firma.cz/<presenter>[/<action>[/<id>]]/', 'Homepage:default');

Editoval Pepino (1. 6. 2022 13:42)