Nesmyslné přepisování parametrů

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

Zdravím,

mám problém s routami, řekl bych, že je mám správně, ale Nette to chápe asi trošku jinak.. Mám následující routy v tomto pořadí:

$router[] = new Route('api/<presenter>/<action>[/<auth_key>]', array(
	'module'    => 'Api',
	'presenter' => 'Home',
	'action'    => 'default'
));

$router[] = new Route('api/<presenter>/<action>', array(
	'module'    => 'Api',
	'presenter' => 'Home',
	'action'    => 'default'
));

Při requestu na https://domena.cz/api/payments/notify-gate/asd123 vše funguje.
Při requestu na https://domena.cz/api/payments/notify-gate?auth_key=asd123 voláním $this->getParameter('auth_key') dostanu zpět null. Routy se mají deklarovat od specifických po obecné, takže předpokládám, že toto je správné pořadí.

Předem díky za odpovědi,
TheKronnY

Editoval TheKronnY (28. 5. 2016 12:33)

David Grudl
Nette Core | 8282
+
0
-

Pohledem do routing debuggeru zjistíš, že se (předpokládám) používá jen první routa a ta druhá je zbytečná. A pokud v cestě není uveden auth_key, jeho hodnota je null, auth_key ve query se ignoruje.

Pokud chceš, aby se používaly obě routy, tak je nějak odliš. Třeba že v té první bude auth_key povinný.

TheKronnY
Člen | 22
+
0
-

David Grudl napsal(a):

Pohledem do routing debuggeru zjistíš, že se (předpokládám) používá jen první routa a ta druhá je zbytečná. A pokud v cestě není uveden auth_key, jeho hodnota je null, auth_key ve query se ignoruje.

Pokud chceš, aby se používaly obě routy, tak je nějak odliš. Třeba že v té první bude auth_key povinný.

Nojo, já jsem pablb :D Omlouvám se, vůbec jsem si neuvědomil že když je to vlastně optional tak že ta druhá je navíc :D Oboum jsem dal Route::ONE_WAY a to taky pomohlo :D

EDIT: Mno nastavil jsem ten <auth_key> na required v jedné routě, musel jsem však stejně oboum nechat Route::ONE_WAY, protože při použití ...?auth_key=... to routovalo na tu specifičtější (což je správně), ale když se dělá request na API, tak při 301 to z druhé strany ukončí..

Editoval TheKronnY (28. 5. 2016 12:49)