Různé akce pro různé parametry

Polki
Člen | 553
+
0
-

Č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
+
+1
-

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

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)