Různé akce pro různé parametry
- Polki
- Člen | 553
Čau lidi. Problém se vloudil.
Mám požadavek na vytvoření aplikace, která v pípadě zadání URL
/test?parametrPage=2
vypíše prvky z databáze na stránce 2. V případě zadání
/test?id=9
vypíše prvek z databáze s id 9. No a v případě zadání
/test
se vytvoří nový záznam v databázi, kde data jsou poslána POSTem.
Otázka zní: Abych si nemusel v presenteru dělat jednu funkci se všemi parametry nepovinnými a pak pomocí různých ifů rozhodovat, jestli jsou vbec parametry vyplněny, jestli nejsou vyplněny špatně atd. a následně větvit podle toho chování jedné akce, tak jsem chtěl vytvořit routy, které by matchovaly parametry a podle toho, jaké parametry jsou zadané, tak by zavolaly danou akci presenteru. Tedy něco jako:
$router[] = new Route('/test?parametrPage', "Test:page");
$router[] = new Route('/test?id', "Test:get");
$router[] = new Route('/test', "Test:insert");
Je něco takového možné? Díky.
EDIT 1:
Jinými slovy: Je možné si vynutit v routě existenci parametru dotazu
s daným jménem?
Editoval Polki (14. 2. 2020 21:52)
- Ondřej Kubíček
- Člen | 494
samozřejmě, máš to skoro dobře
$router[] = new Route('/test?parametrPage=<page>', "Test:page");
$router[] = new Route('/test?id=<id>', "Test:get");
$router[] = new Route('/test', "Test:insert");
- Polki
- Člen | 553
Ondřej Kubíček napsal(a):
samozřejmě, máš to skoro dobře
$router[] = new Route('/test?parametrPage=<page>', "Test:page"); $router[] = new Route('/test?id=<id>', "Test:get"); $router[] = new Route('/test', "Test:insert");
Není toto třeba jen pro Nette3 a výše? Našel jsem toto sice v dokumentaci, ale bohužel když tento příklad použiji, tak mi to ať zadám jakýkoliv parametr, matchne tu první routu a dostanu se na Test:page. To je důvod, proč se ptám tady.
Používám Nette 2.4
Napadá mě jen nedělat to takto jednoduše, ale udělat si nějaký check ručně. Jenže když udělám check a nematchne to tu první routu, tak mi to napíše, že ty další dvě jsou stejné a rovnou je to přeskočí…
Editoval Polki (16. 2. 2020 0:13)