Router přesměrovává na špatnou URL

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

Mám v aplikaci routu:

$router[] = new Route('/[<lang_key de|pl|nl>/]<url .+>/', array(
	'module' => 'Front',
	'presenter' => 'Homepage',
	'action' => 'page',
	'lang_key' => 'de',
	'url' => array(
	    \Nette\Application\Routers\Route::VALUE => NULL,
	    \Nette\Application\Routers\Route::FILTER_IN => NULL,
	    \Nette\Application\Routers\Route::FILTER_OUT => NULL,
	)
));

Mělo by se to chovat tak, že když přejdu na /test-url/, tak zavolá Front:Homepage:page, jako parametr lang_key pošle „de“ a druhý parametr url bude „test-url“. Když bych šel na /pl/test-url/ tak to má dávat lang_key = „pl“ a url = „test-url“.

Ovšem chová se to tak, že když zadám /test-url/, tak to přesměruje na /page/ a když zadám /pl/test-url/ tak přesměruje na /pl/page/. Lang_key parametr tedy funguje správně i parametr url nastaví před přesměrováním správně.

Otázka je: Proč přesměrovává na /page/, kde pak volá Front:Homepage:page s parametrem url = page? Potřebuji se zbavit toho přesměrování.

Používám Nette 2.1.

Díky za vaše případné nápady, dost by mi to pomohlo. Už jsem nad tím strávil nějaký čas…

Editoval mesour (14. 2. 2014 15:12)

jazby
Člen | 44
+
0
-

já nevím to by fungoval mělo (nezkoušel jsem to)

<script>
$router[] = new Route('/[<lang_key de|pl|nl>/]<url .+>/', array(
    'module' => 'Front',
    'presenter' => 'Homepage',
    'action' => 'page',
    'lang_key' => 'de',
    'url' => NULL
));
</script>

není někde předtím jiná routa která by to ovlivnila? co na to routing debugger, dle čeho matchuje?

mesour
Nette Blogger | 236
+
0
-

Právě jsem vyzkoušel vymazat předchozí routu a začalo to fungovat.

Divné ale je, že tahle /[<lang_key de|pl|nl>/]<url .+>/ je vždy matched, jak před tak i po přesměrování.

Tím pádem nechápu, jak by to ta předchozí routa ovlivnila i když po zakomentování té předchozí to začalo běžet.

mesour
Nette Blogger | 236
+
0
-

Už jsem zjistil přesněji, že to dělá metoda constructUrl té předchozí routy. Takže už alespoň vím, kde hledat problém.

Díky za nasměrování :)

jazby
Člen | 44
+
0
-

Tak bez zaslání předchozí routy těžko posoudit (věštit neumím). Každopádně schválně jsem tuto routo vyzkoušel na localu a funguje to přesně jak jsem předpokládal. Tedy chyba musela být v dřívějším matchnutí.

Edit:
Takže chybu dělal ConstructUrl? A nebylo by tedy záhodno říci, že je aplikován uplně vlastní router a nikoliv default Nette Route? To se pak těžko hledá …

Editoval jazby (14. 2. 2014 15:40)

mesour
Nette Blogger | 236
+
0
-

Chyba nebyla v předchozím matchnutí, vracelo NULL. Proč to ale tedy bralo v potaz předchozí ConstructUrl, to je zvláštní.

Přidal jsem do předchozího ConstructUrl, že pokud je to presenter Homepage a akce page, tak vrátí NULL. Samozřejmě názvy presenterů a akcí jsou nastavitelné, ale to je tu vedlejší. No a začalo to fungovat.

Díky za tvůj čas a nasměrování.