Routování se dvěma id parametry

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

Ahoj,
potřeboval bych napsat route která by byla ve tvaru: show/3/4, kde první číslo je číslo týmu a druhé číslo hráče. Zatím mám

$router[] = new Route('<presenter>/<teamId>/<playerId>/', 'Main:default');

ale to mi dává adresu:

main/?teamId=1&playerId=4

Napadlo mne udělat 2 routy

	$router[] = new Route('<presenter>/<id>', 'Main:default');
	$router[] = new Route('<presenter>/<[^\d$]>/<id>/', 'Main:show');

ale to hází:
Nette\Application\BadRequestException #404
No route for http request.

Díky za pomoc.

EDIT:
Řešení: Bylo třeba posunout route před obecnou routu. A vytvořit v presentru metodu actionDefault($teamId, $playerId = NULL).

Editoval Vastlik (21. 5. 2015 11:14)

David Matějka
Moderator | 6445
+
+3
-

tipuju, zes tu routu dal az za obecnou ?

routy se vyhodnocuji od shora a pouzije se prvni pouzitelna, viz doc: https://doc.nette.org/…tion/routing#…

Je důležité, v jakém pořadí jsou routy definovány, protože se zkouší postupně odshora dolů. Platí pravidlo, že routy deklarujeme od specifických po obecné. Pamatujte na to, že počet rout má vliv na rychlost aplikace, zejména při generování odkazů. Proto se vyplatí routovací tabulku zjednodušit.

takze tu tvou routu presun pred obecnou

Oli
Člen | 1215
+
+1
-

Máš to v action metodě v tom presenteru? Předpokládejme, že můžeš mít zobrazený jen tým, takže ještě by byla možnost show/3. Pak by to mělo být zhruba takhle:

//router
$router[] = new Route('<presenter>/<teamId>[/<playerId>]', 'Main:default');

// presenter
public function actionDefault($teamId, $playerId = NULL)
{
	// ...
}

Zkontroluj si taky v debugBaru, jestli jsi ve správném presenteru a akci.

Vastlik
Člen | 58
+
0
-

Jo, jo, špatně čtu. :) Díky

Vastlik
Člen | 58
+
0
-

Díky! Pomohlo to. Funguje jak má, zapomněl jsem na NULL. :)