Routování jazyku podle domény
- Miri
- Člen | 117
Ahoj měl bych na vás menší dotáz.
moje aktuální routa vypadá následovně:
$router[] = new Route('[<lang=cs [a-z]{2}>/][<prom1>/][<prom2>/][<prom3>/]', 'Homepage:default');
(pro jednu domény a více jazyků)
Nyní:
domena.cz/clanek/myš
domena.cz/en/article/mouse
Potřeboval bych ale jazyk defaultně rozlišit pro dané domény
$router[] = new Route('//domena.cz/[<lang=cs [a-z]{2}>/][<prom1>/][<prom2>/][<prom3>/]', 'Homepage:default');
$router[] = new Route('//domena.com/[<lang=en [a-z]{2}>/][<prom1>/][<prom2>/][<prom3>/]', 'Homepage:default');
Mělo by být
domena.cz/clanek/mys
domena.com/article/mouse
(zvolí se defaultně en)
Toto mi ovšem nefunguje a přesměruje to vždy na .cz/en
Předem díky za každou pomoc.
Míra
- jiri.pudil
- Nette Blogger | 1029
To bude tím, že v té první routě sice specifikuješ „cs“ jako
výchozí hodnotu parametru lang
, ale ne jedinou, protože
[a-z]{2}
matchne i „en“, takže první routa vygeneruje platnou
URL i pro angličtinu.
Můžeš to zkomprimovat do jedné routy, parametr lang
přiřadit přímo k TLD a přeložit si ho na locale filtrovací tabulkou.
Nějak takhle (psáno z hlavy):
$router[] = new Route('//domena.<lang>/[<prom1>/][<prom2>/][<prom3>/]', [
'presenter' => 'Homepage',
'action' => 'default',
'lang' => [
Route::VALUE => 'cs',
Route::FILTER_TABLE => [
'cz' => 'cs',
'com' => 'en',
],
],
]);
- Michal Hlávka
- Člen | 190
No to není úplně pravda ne? Jemu se první routa nemůže matchnout, protože je na jiné doméně. A pokud nechceš přesměrovávat, nastav parametr lang jako persistentní.
- kolsi
- Člen | 131
Trochu starší téma, ale ať nezakládám zbytečně nové. Lze nějak elegantně vyřešit situaci, kdy chci mít jeden kód na více doménách (např. vývojová a finální) a pro každou doménu potřebuji jiné routování, jinak než:
public static function createRouter()
if (aktualni_domena == domena1) {
$router[] = new Route(....)
} else {
$router[] = new Route(....)
}
return $routeList;
}
Pokud totiž definuji dvě routy najednou, např.
// router pro domena1
$router[] = new Route('//[www.][<module>.]domena1.<lang eu>/<presenter>/<action>', [ ....
// router pro ostatni domeny
$router[] = new Route('[<lang (cz|eu)>/]<module>/<presenter>/<action>', [ ....
tak na domena1 vše šlape ok, ale při přístupu na jiné doméně jsem okamžitě přesměrován na domena1. Jak je vůbec možné, že se vygeneruje URL podle první routy, když je jiná doména?