Routování a povinný parametr
- venoXis
- Člen | 2
Ahoj,
prosím o radu ohledně routování. Chtěl bych docílit adres ve formátu:
admin/clanek
admin/clanek/add
admin/clanek/10/edit
Napsal jsem si tyto routy:
$container->router[] = new Route('admin/<presenter>/<id [0-9]+>/<action>', array(
'module' => 'Admin',
));
$container->router[] = new Route('admin/<presenter>[/<action>]', array(
'module' => 'Admin',
'presenter' => 'Admin',
'action' => 'default',
));
Vše funguje jak má, avšak s jedním nedostatkem. Logicky funguje i cesta „admin/clanek/edit“, tedy bez parametru a to nechci. Zde bych chtěl zobrazit status 404.
Existuje možnost jak si vynutit parametr do metody? Jak by se tento problém dal řešit?
Děkuji
- BigCharlie
- Člen | 283
Pokud ti v tom nic zásadního nebrání, dej id článku na konec, tj.
$container->router[] = new Route('admin/<presenter>/<action>/<id [0-9]+>', array(
'module' => 'Admin',
));
Jinak se ti bez vlastního routeru (pohledej ve fóru) budou ty akce těžko rozlišovat.
- Michal Vyšinský
- Člen | 608
Tak ona adresa „admin/clanek/edit“ odpovídá té druhé routě. Jestli chceš, aby se nedalo na tu url dostat, tak v actionEdit kontroluj, zda je nastavené ID. A pukud není, vyhoď BadRequestException – to ti na produkčním serveru zobrazí 404.
Editoval CherryBoss (2. 12. 2012 21:15)
- mildabre
- Člen | 62
Máš tedy jednu akci pro přidání článku add a jinou pro editaci edit. Já obvykle pro přidání záznamu a editaci mám jedinou akci edit a pokud není id zadané tak tato akce přidá nový článek.
Má to tu výhodu, že máš o akci méně, ale zase si musíš ošetřit existenci id. Ty url pak by vypadaly takhle:
admin/clanek/edit založení nového
admin/clanek/edit/1 editace existujícícho
Parametr id doporučuji dát nakonec, je to takový standard v Nette aplikacích – je to už v tutoriálu.
Co navrhuji je jenom taková alternativa jak na ten problém jít. Můžeš klidně zůstat i u staré koncepce.
Editoval mildabre (8. 12. 2012 17:11)