routovani pro vice modulu a zobrazeni adresy bez tecky
- elden46
- Člen | 37
Ahoj,
vytvarim prvni vetsi projekt v nette, jedna se o aplikaci, ktera zobrazuje
data pro uzivatele a ma zaroven backend, kam se pristupuje pres prihlaseni a
data pro uzivatele se tam „vari“.
Zacal jsem aplikaci vyvijet jako dva samostatne projekty vyuzivajici stejnou
databazi, nedavno jsem se ale rozhodl obe casti spojit a z backendu a frontendu
udelat moduly.
Vytvoril jsem si dva adresare v app, AdminModule a FrontModule, do nich jsem nakopiroval presentery a templaty obou casti aplikace.
Potreboval bych poradit s nastavenim rout, ktere se mi chovaji ponekud podivne a ja nejsem s to prijit na to, kde je chyba.
Routy
$router[] = new Route('produkty/<category>[/page-<page>]', 'Front:CategoryView:default');
$router[] = new Route('produkty/<category>/<subcategory>[/page-<page>]', 'Front:SubCategoryView:default');
$router[] = new Route('informace/<action>', 'Front:StaticView:Informace');
se staraji o zobrazeni katalogu produktu + statickych stranek (StaticView + jeho sablony). Dosud vse v poradku.
Problem je v tom, ze po nastaveni modulu mi routa
$router[] = new Route('<presenter>/<action>[/<id>]', 'Front:Homepage:Default');
vytvari adresu ve tvaru /front.cart, kdezto ja ji chci mit zobrazenou pouze jako /cart.
Vsechny routy:
$router = new RouteList;
$router[] = new Route('', 'Front:Homepage:Default', Route::ONE_WAY);
$router[] = new Route('produkty/<category>[/page-<page>]', 'Front:CategoryView:default');
$router[] = new Route('produkty/<category>/<subcategory>[/page-<page>]', 'Front:SubCategoryView:default');
$router[] = new Route('informace/<action>', 'Front:StaticView:Informace');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Front:Homepage:Default');
Druhy problem nastava s naroutovanim backendu, ktey chci mazacky skryt do
slozky /admin.
Backend funguje na klasicke strukture <presenter>/<action>[/id].
Ovlada ho routa
$router[] = new Route('admin/<presenter>/<action>[/<id>]', 'Admin:Overview:default');
ktera funguje (do adminu se dostanu, naloguju a podobne – v teto casti mi ani nevadi zapis adresy ve tvaru /admin/admin.customers/list), ale zaroven mi rozhodi chovani frotendu.
Po prichodu na web (v adresnim radku nic, nez adresa aplikace) se mi vygeneruje adresa /admin/front.homepage/ (ale zobrazi v poradku homepage z frontendu) – tady pochopitelne nechci generovat zadnou viditelnou subadresu, odkazy na Category, SubCategory a Static view funguji spravne (adresy bez admin.neco nebo front.neco), ale odkaz na jakykoliv jiny presenter, napriklad
<a n:href = "Cart:default">kosik</a>
mi sice zobrazi spravny presenter/action, ale vygeneruje mi k ni adresu /admin/front.cart/
Routy po pridani routy pro obsluhu backendu
$router = new RouteList;
$router[] = new Route('', 'Front:Homepage:Default', Route::ONE_WAY);
$router[] = new Route('produkty/<category>[/page-<page>]', 'Front:CategoryView:default');
$router[] = new Route('produkty/<category>/<subcategory>[/page-<page>]', 'Front:SubCategoryView:default');
$router[] = new Route('informace/<action>', 'Front:StaticView:Informace');
$router[] = new Route('admin/<presenter>/<action>[/<id>]', 'Admin:Overview:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Front:Homepage:Default');
Nemuzete me prosim nakopnout?
Dekuju
- Tomáš Kolinger
- Člen | 136
Já to řešil tak, že jsem si moduly definoval zvlášť, jako „listy“:
$router[] = $backendRouter = new RouteList("Backend");
$backendRouter[] = new Route("admin/index.php", "Index:", Route::ONE_WAY);
$backendRouter[] = new Route("admin[/<presenter>][/<action>][/<id>]", "Index:");
$router[] = $frontRouter = new RouteList("Front");
$frontRouter[] = new Route("index.php", "Index:", Route::ONE_WAY);
$frontRouter[] = new Route("<presenter>[/<action>][/<id>]", "Index:");
Tím by mělo odpadnout generování adres typu modul.presenter… Při linkování v šabloně/presenteru se ti při neuvedení automaticky přiřadí modul, ve kterém je daný presenter. Když chceš linkovat do jiného modulu, tak ho prostě zapíšeš „:Modul:Presenter:action“…
Samozřejmostí je umístění presenterů do správných složek a hlavně namespaces: FrontModule a BackendModule (to ale nejspíš máš).
Editoval Tomáš Kolinger (9. 3. 2012 12:13)