Routování se dvěma id parametry
- Vastlik
- Člen | 58
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
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
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.