Pěkná routa pro action Homepage
- Tomáš Votruba
- Moderator | 1114
Když je nějaké action/view na presenteru Homepage, url vypadá
nehezky homepage/view
, chci pouze
view
. Už jsem to řešil zde,
bohužel neúspěšně.
Zmiňované řešení bohužel bere všechny presentery jako action:
$router[] = new Route("<action>/[<id>]", "Homepage:default");
Mé aktuální řešení vypadá nějak takto:
$router[] = new Route("test", "Homepage:test");
$router[] = new Route("test2", "Homepage:test2");
$router[] = new Route("test3", "Homepage:test3");
// resp.
$router[] = new Route("<action test|test2|test3>/[<id>]", "Homepage:default");
Jde to lépe?
EDIT: Typo.
Editoval Schmutzka (9. 3. 2012 21:28)
- Jan Endel
- Člen | 1016
Nette potřebuje nějak odlišit, co je action a co presenter, pokud bys možné action nevyčetl, tak nemá šanci poznat co je co (umělou inteligenci ještě bohužel nemáme :-)). Napadá mě maximálně tvorba vlatního routeru, kde by byly možné action uložené hezčeji nebo, což nevím jak by úplně vypadalo vlastní router, který nejdříve zkusí action a catchuje BadRequestException a kdyžtak přehodí na presenter (nevím jestli by to fungovalo…).
- llook
- Člen | 407
Jedině mě napadá podědit si Route a přidat nějakou šílenou logiku, aby zjistila, jestli daný presenter nabízí danou akci a podle toho se buďto použila, nebo ne. Asi by to nebyl pěkný kód a nefungoval by univerzálně (procházel by reflection třídy daného presenteru a soubory s šablonami, přičemž by musel spoléhat na to, že dodržuješ obvyklé konvence).
Tvoje současné řešení je myslím aktuální best practice. Prostě se zatím nepočítá s tím, že by těch ručně namlácených rout mohlo být tolik, aby to byl problém.
- Tomáš Votruba
- Moderator | 1114
Jen mi to přišlo jako dost hloupé řešení, vše vypisovat na tvrdo.
Díky za ujištění :).
Možná by nebylo špatné příznakové řešení:
$router[] = new Route("<action>/[<id>]", "Homepage:default", Route::HOMEPAGE);
Které by pro daný presenter přistupovalo k action/view
bez
jeho zmínění.
- awsickness
- Člen | 98
no mozna si udelat vlastni router neco jako defaulthomepageIdrouter tam
kontrolovat zda dane id existuje pokud ne vratit null.
a pod tuhle routu dat routu s action/view ktera pak moznaprojde.