Routování a povinný parametr

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

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

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.

venoXis
Člen | 2
+
0
-

Toto můj problém nevyřeší, pořád bude adresa „admin/clanek/edit“ dostupná i bez parametru.

Michal Vyšinský
Člen | 608
+
0
-

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

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)