routa na signál s parametrama u aplikace s Moduly
- ji_ri_k
- Člen | 44
Zdravím ve spolek,
narazil jsem na problém s routerem u signálů (možná chybu v Nette, možná už jsem jen přepracovaný).
Dejme tomu, že mám definovány tyto routy:
$router[] = new NRoute('admin/<presenter>/[<action>][/<id>]', array(
'module' => 'Admin',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
$router[] = new NRoute('<presenter>/<action>[/<id>]', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
$router[] = new NRoute('<presenter>/<action>[/<id>]', array(
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
Teď mám v některém presenteru (Admin_<Name>Presenter) obsluhu signálu:
public function handleTestOne() { ... }
public function handleTestTwo($id) { ... }
V šabloně mám pak makra pro vygenerování odkazů takto:
{link testOne!}
{link testTwo! 3}
A po spuštění dojde k vygenerování pouze prvního odkazu, u druhého mi to píše, že není definována routa.
// tento link na signál se vygeneruje správně
/localhost/sandbox/admin/gallery/?do=testOne
// ovšem zde mi router vůbec nevygeneruje odkaz, přitom se jedná o signál ve stejném presenteru i ve stejné šabloně
error: No route for Admin:Gallery:default(id=3, do=testTwo)
Přitom pokud se nepletu, tak stejná routa (tedy ta první) by měla sestavovat odkaz pro oba signály. Proč se tomu tak neděje?
Verze Nette: a2ef2b9 released on 2011–12–20 (prefixovaná verze pro PHP 5.2)
//edit: doplněna verze Nette
Editoval ji_ri_k (20. 12. 2011 20:35)
- ji_ri_k
- Člen | 44
Tak jsem ještě našel další pro mě nepochopené chování:
Když tyto odkazy nechám vygenerovat v šabloně pro actionDefault() (default.latte) tedy dle routeru výchozí, tak to selže, pokud je ale nechám vygenerovat v jiné action (ne výchozí, např. add.latte) tak router vygeneruje odkazy správně!
{link testOne!}
{link testTwo! 3}
// na adrese http://localhost/sandbox/admin/gallery/ vygeneruje toto:
/sandbox/admin/gallery/?do=testOne
error: No route for Admin:Gallery:default(id=3, do=testTwo)
// ale na adrese http://localhost/sandbox/admin/gallery/add to vygeneruje správně toto:
/sandbox/admin/gallery/add?do=testOne
/sandbox/admin/gallery/add/3?do=testTwo
Editoval ji_ri_k (20. 12. 2011 20:35)
- ji_ri_k
- Člen | 44
Opravdu nikdo neví proč se to tak chová? Nemám chybu v definici těch rout? Podotýkám, že se jedná o aplikaci s moduly (AdminModule, FrontModule).
Nebo je chyba někde v Nette? Zkusím se na to snad zítra/pozítří podívat, ale byl bych rád kdyby mě někdo ujistil, že nemám chybu v definování těch rout. Dle dokumentace snad ne, jestli jsem teda něco nepřehlédl.