Spatne zvoleni presenteru routerem

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

Zdravim,

mam nasledujici routy:

$router[] = new Route('[<lang en|ru>/][index.php]', array(
    'presenter' => 'Homepage',
    'action' => 'default'
));

$router[] = new Route('[<lang en|ru>/]<presenter>/<id>', array(
    'action' => 'show'
));

$router[] = new Route('[<lang en|ru>/]<presenter>', array(
    'action' => 'search'
));

Pozadavek na http://example.com/en/article vyhodi 404 a ladenka hlasi, ze nebyl nalezen presenter ‚en‘. To, ze se hleda presenter ‚en‘, je ocividne spatne.

Problem je zjevne v tom, ze (persistentni) parametr ‚lang‘ je volitelny a Nette pravdepodobne nedokaze odlisit http://example.com/article/1 od http://example.com/en/article. Jenze me se ten efekt automatickeho doplneni jazyka pri vynechani parametru ‚lang‘ libi a nechci se ho vzdat :)

Chybu resi pridani vypisu vsech povolenych presenteru do routy napr. <presenter articles|files|users>. Coz mi zas neprijde uplne elegantni a prakticke.

Nenapada nekoho z vas lepsi reseni?

Dekuji.

Elijen
Člen | 171
+
0
-

Ta otazka je tak zaludna, ze nikdo nevi odpoved, nebo tak primitivni, ze se nikomu nechce psat? :-D

Editoval Elijen (27. 9. 2010 9:15)

westrem
Člen | 398
+
0
-

No napadaju ma 2 mozne riesenia ale nemam cas ich testovat ci naozaj funguju:

1. nastav poli defaults aj defaultny jazyk tzn:

$router[] = new Route('[<lang en|ru>/]<presenter>/<id>', array(
    'lang' => 'en',
    'action' => 'show'
));

Toto ale neviem ci zafunguje.

2. nastav <presenter> masku tak aby podporovalo len viac ako 2 znakove nazvy – tym sa zabezpeci, ze sa ti nebude matchovat lang na presenter

Pripadne sa skus inspirovat nasledovnym:

Filip Procházka
Moderator | 4668
+
0
-

+1 pro kombinaci obou řešení