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
+
0
-

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
+
0
-

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,
));