Masky v route s locale nefungujú podľa očakávania
- Lkopo
- Člen | 65
Zdravím, používam na svojom sandboxe tento routing:
$router = new RouteList();
$router[] = new Route('auth/login', 'Sign:in');
$router[] = new Route('auth/logout', 'Sign:out');
$router[] = new Route('<presenter>/<action>[/<id>]/', 'Homepage:default');
return $router;
Čo funguje skvele, auth/login je maska sign/in atď. a zvyšok funguje podľa posledného pravidla.
No, keď som sa pokúšal spraviť lokalizáciu a pridať ju do routingu:
$router = new RouteList();
$router[] = new Route('<locale=cs>/auth/login', 'Sign:in');
$router[] = new Route('<locale=cs>/auth/logout', 'Sign:out');
$router[] = new Route('<locale=cs>/<presenter>/<action>[/<id>]/', 'Homepage:default');
return $router;
Tak sa mi domain.tld/www/
naroutuje na auth/login
bez toho, aby som do URL pripisoval /auth/login
, okamžite to
berie, že sa jedná o toto route. Celé to funguje jedine, keď dám prvé
2 routes na locale do hranatých zátvorkách []
, ale chcem
dosiahnuť tohto efektu:
/www/cs/auth/login
/www/cs/auth/logout
/www/en/auth/login
/www/en/auth/logout
Inak to funguje takto:
/www/auth/login
/www/auth/logout
/www/en/auth/login
/www/en/auth/logout
Editoval Lkopo (19. 9. 2014 17:45)
- japlavaren
- Člen | 404
<locale=cs> nastavi, ze cs je default a preto sa nepouzije…
niesom si isty, ci to bude fungovat, ale skus nastavit toto:
„[!<locale=cs>]/…“
ak nie, skus pouzit „<locale>/…“ a spravit jednosmernu routu s „<locale=cs>“
Editoval japlavaren (19. 9. 2014 21:12)
- Lkopo
- Člen | 65
Prvý príklad nefunguje, hodí to 404 chybu.
Ten druhý funguje perfektne, rovno to vyrieši aj problém v prvom príspevku. Mám to takto, hádam to je dobré:
$router[] = new Route('[<locale=cs>/]', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<locale>/auth/login', 'Sign:in');
$router[] = new Route('<locale>/auth/logout', 'Sign:out');
$router[] = new Route('<locale>/<presenter>/<action>[/<id>]/', 'Homepage:default');
Edit: ešte mám takú menšiu otázočku k tomu, keď zadám /cs/sign/in tak ma to presmeruje na /cs/auth/login, je možné, aby pri tej prvej možnosti hodilo 404 chybu, alebo je jednoduchšie prepísať Presenter a actiony (AuthPresenter, …)?
Veľmi pekne ďakujem.
Editoval Lkopo (19. 9. 2014 21:08)
- japlavaren
- Člen | 404
/cs/sign/in ti odchyti posledna routa takze to funguje spravne… nevidim dovod, by ti to malo vadit
ale ak to chces vazne pokne, nevytvaraj dalsie routy, ale pouzi jednu routu na auth a filter tabulku… https://doc.nette.org/…tion/routing
- Lkopo
- Člen | 65
No ja som nakoniec SignPresenter premenoval na AuthPresenter a z in/out actions spravil login/logout a mám to vo výsledku to isté a jednoduchšie, keďže tvar /sign/in neplánujem používať.
Ale ešte raz vďaka za pomoc, pomohlo mi to veľmi a zrejme by ma nenapadla táto možnosť, síce som si o tejto časti v dokumentácii už X-krát prečítal, asi som ju nepochopil poriadne :D
- japlavaren
- Člen | 404
napadla ma este jedna vec – ak to presmerujes takto bude to s 403 a to bude nastalo. mozno by bolo lepsie nechat home na adrese domeny a ostatne smerovat ako /cs/…
tj. zrusit jednosmerku, na home routu <locale=cs> a na ostatnych nechat <locale>
Editoval japlavaren (19. 9. 2014 21:32)
- japlavaren
- Člen | 404
este k routam, myslel som to takto
/ – home
/cs/auth/login
/cs/auth/logout
/en/auth/login
/en/auth/logout
cs by bola vzdy castou url, ale nie na home (usetris jeden zbytocny redirect)
na parametre v presenteri mozes pouzit Presenter::getParameter()
a $presenter je standartnou premennou sablony (ako $template, $user a neviem co este…)
- Lkopo
- Člen | 65
/ – home
/cs/auth/login
/cs/auth/logout
/en/auth/login
/en/auth/logout
Takto mi to fungovalo, keď som mal pravidlo
$router[] = new Route('<locale=cs>/<presenter>/<action>[/<id>]/', 'Homepage:default');
Ale zámerne to chcem tak, aby ma presmerovalo už na začiatku na /cs/.
Čiže prv musím ten parameter získať v presenteri a dať do šablóny a až potom môžem s týmto pracovať, tak?
Editoval Lkopo (19. 9. 2014 21:49)
- japlavaren
- Člen | 404
presenter mas priamo dostupny v sablone, cize mozes pouzit {$presenter->getParameter(locale)}, i ked cistejsie by bolo predavat si locale do template cez createTemplate metodu v presenteri