Stejné routy s jiným parametrem – parametr se nepřenese

admin@easyweb4u.cz
Backer | 143
+
0
-

Ahoj,

mám dvě routy

<?php
adminRouter->addRoute('admin/<presenter>/<action>/<proc>/<userid>', [
	'presenter' => 'Account',
	'action' => 'default',
]);

adminRouter->addRoute('admin/<presenter>/<action>/<proc>/<langid>', [
	'presenter' => 'Language',
	'action' => 'default',
]);
?>

url je v obou případech ok, např.:

admin/account/default/4/8

a

admin/language/default/4/6

ale parametr langid se nepřenese, userid ano, pokud jsou routy v tomto pořadí. Co s tím?

Editoval admin@easyweb4u.cz (14. 1. 2020 13:16)

Kamil Valenta
Člen | 762
+
+1
-

Protože to vždycky matchne ta první, jejímu patternu to odpovídá.
Buď tam přidej filtrační funkci, která rozhodne, zda je userid platné a pokud ne, bude druhá routa hledat platné langid, nebo (pokud nemáš více presenterů) je uveď explicitně:

adminRouter->addRoute('admin/account/<action>/<proc>/<userid>', [
	'presenter' => 'Account',
	'action' => 'default',
]);

adminRouter->addRoute('admin/language/<action>/<proc>/<langid>', [
	'presenter' => 'Language',
	'action' => 'default',
]);

Příp. se dá filtrovat i podle existujícího Presenteru. Těch možností je samozřejmě mnoho a záleží na velikosti projektu, někdy IMHO vyjmenování „natvrdo“ může být nejrychlejší.

Editoval kamil_v (14. 1. 2020 13:50)

admin@easyweb4u.cz
Backer | 143
+
0
-

kamil_v napsal(a):

Protože to vždycky matchne ta první, jejímu patternu to odpovídá.
Buď tam přidej filtrační funkci, která rozhodne, zda je userid platné a pokud ne, bude druhá routa hledat platné langid, nebo (pokud nemáš více presenterů) je uveď explicitně:

adminRouter->addRoute('admin/account/<action>/<proc>/<userid>', [
	'presenter' => 'Account',
	'action' => 'default',
]);

adminRouter->addRoute('admin/language/<action>/<proc>/<langid>', [
	'presenter' => 'Language',
	'action' => 'default',
]);

Příp. se dá filtrovat i podle existujícího Presenteru. Těch možností je samozřejmě mnoho a záleží na velikosti projektu, někdy IMHO vyjmenování „natvrdo“ může být nejrychlejší.

Jo jo, klidně natvrdo, s tím nemám problém. Jak jednoduché, díky.