Jak efektivně řešit routování na různé domény?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Aurielle
- Člen | 1281
Ahoj, snažím se vytvořit routy ve tvaru www.domain.cz/lang/<module>/presenter/action/id. Už s tím experimentuju dva dny a při jednom řešení mi sice routování nějak funguje, ale nefunguje mi kanonizace z rootu webu (URL bez jazyka), jindy zase jakákoliv URL přesměrovává na default.
Routa vypadá takto:
$router[] = new Route('//[!<domain>]/[!<lang [a-z]{2}>/]<presenter>/<action>/<id>', array(
'module' => 'Cms',
'presenter' => 'Homepage',
'action' => 'default',
'lang' => Nette\Environment::getVariable('lang'),
'domain' => Avalon\Tools::getSite()->domain,
'id' => NULL,
));
// Domain je styl:
Route::addStyle('domain');
Route::setStyleProperty('domain', Route::PATTERN, '.*');
Route::setStyleProperty('domain', Route::FILTER_IN, function($value) {
return Avalon\Tools::getSite()->domain; // Zajišťuje dosazení aktuální domény do routy a zahození špatných výsledků, které generuje pattern .*
});
Route::setStyleProperty('domain', Route::FILTER_OUT, function($value) {
return $value;
});
V domain mám na testovacím prostředí hodnotu
localhost/phpin-sandbox
.
- Aurielle
- Člen | 1281
Došel jsem k tomu, že při přidání nějaké statické části do masky routy vše začne fungovat (což vysvětluje, proč mi stejná routa pro administraci se statickou částí admin funguje, a pro CMS modul nikoliv).
// Nefunkční routa:
// (z lang jsem udělal taky styl)
$router[] = new Route('//[!<domain>]/[!<lang>/][<module>/][<presenter>[/<action>][/<id>]]', array(
'module' => 'Cms',
'presenter' => 'Homepage',
'action' => 'default',
'lang' => Nette\Environment::getVariable('lang'),
'domain' => Avalon\Tools::getSite()->domain,
));
// Funkční routa:
$router[] = new Route('//[!<domain>]/[!<lang>/]admin/[<module [a-zA-Z0-9]*Admin>/][<presenter>[/<action>][/<id>]]', array(
'module' => 'Admin',
'presenter' => 'Dashboard',
'action' => 'default',
'lang' => Nette\Environment::getVariable('lang'),
'domain' => Avalon\Tools::getSite()->domain,
));