Ja zachovat doménu při routování

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

Ahoj, trápím se s následujícím problémem. Mám dvě různé domény abc.cz, xyz.sk. Na těch doménách běží aplikace, která má administrační část na subdoméně admin a frontend na www.

Pro potřeby překladu potřebuji odchytit jazyk, který se odvíjí od tld. A tady jsem se do toho nějak zamotal.

Moje představa:

  • admin.abc.cz → module:admin, locale:cz
  • admin.xyz.sk → module:admin, locale:sk
  • www.abc.cz → module:www, locale:cz
  • www.xyz.sk → module:www, locale:sk

Potřeboval bych, aby se název domény (tedy abc či xyz) zachovával a myslel jsem, že k tomu půjdou použít Foo parametry. Jenže ty standardně tvoří co nejkratší adresu…

Naivní představa je něco takového (což je neexistující kombinace chování foo parametrů a volitelných sekvencí):

	AdminRouter::createRoutes($router, '//admin.<!? abc|xyz>.<locale cz|sk/');
	FrontRouter::createRoutes($router, '//www.<!? abc|xyz>.<locale cz|sk>/');

	//Naznačení routování
	AdminRouter::createRoutes() {
		$admin = new RouteList('Admin');
		$admin[] = new Route($prefix . '<presenter>/<action>[/<id>]', 'Board:default', Route::SECURED);
		...
	}

	FrontRouter::createRoutes() {
		$front = new RouteList('Front');
		$front[] = new Route($prefix . '<presenter>/<action>[/<id>]', 'Homepage:default');
		...
	}

Kdyby existovala proměnná %domainname%, měl bych vyhráno, ale existují jen %domain% a %tld%.

Jde nějak zachovat v url název domény, aniž bych se o něj musel starat?

Aurielle
Člen | 1281
+
0
-

Nepomůžou ti nové placeholdery pro doménu? Viz https://doc.nette.org/…tion/routing#…

BigCharlie
Člen | 283
+
0
-

ne, protože %domain% bere i tld, což potřebuju dostat do locale…

Tawre
Člen | 3
+
0
-

Já jsem zrovna řešil něco podobného. Vlastní router se mi psát nechtělo, tak jsem si pomohl persistními parametry.

Ve výsledku by to bylo u tebe nějak takhle:

AdminRouter::createRoutes($router, '//admin.<domain>.<locale cz|sk/');
FrontRouter::createRoutes($router, '//www.<domain>.<locale cz|sk>/');

//Naznačení routování
AdminRouter::createRoutes() {
    $admin = new RouteList('Admin');
    $admin[] = new Route($prefix . '<presenter>/<action>[/<id>]', 'Board:default', Route::SECURED);
    ...
}

FrontRouter::createRoutes() {
    $front = new RouteList('Front');
    $front[] = new Route($prefix . '<presenter>/<action>[/<id>]', 'Homepage:default');
    ...
}

Persistentní parametry v presenterech budou $locale a $domain. Tím si neodstřelíš generování odkazů.

Editoval Tawre (8. 4. 2015 23:37)