Pěkná routa pro action Homepage

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.