Router přesměrovává na špatnou URL
- mesour
- Nette Blogger | 236
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
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
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.
- jazby
- Člen | 44
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
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í.