routa na signál s parametrama u aplikace s Moduly

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ji_ri_k
Člen | 44
+
0
-

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

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

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.