Dynamicke subdomeny na ruznych domenach

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

Cau,
potreboval bych poradit.

Moje aplikace se sklada z nekolika modulu

pulic, admin, eshop

public bezi na www.domena.cz
admin bezi na www.domena.cz/admin

a pak potrebuji dynamicke sudomeny tj

<username>.domena.cz
<jine_username>.domena.cz

a to by se melo smerovat do modulu eshop a podl username pak poznam o jakeho uzivatele se jedna.
Nejlepsi by bylo reseni, kdy by mohla byt dynamicka i domena.

<?php

$router[] = new Route('admin/<presenter>/<action>/', array(
	'module' => 'Admin',
	'presenter' => 'Default:Default',
	'action' => 'default'
));

$router[] = new Route('//<username [a-zA-Z0-9]*>.<domain [a-zA-Z0-9]*>.<tld [a-zA-Z0-9]*>/<presenter>/<action>', array(
	'module' => 'Eshop',
	'presenter' => 'Default',
	'action' => 'default'
));


$router[] = new Route('index.php', array(
	'module' => 'Public',
	'presenter' => 'Default',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('<presenter>/<action>', array(
	'module' => 'Public',
	'presenter' => 'Default',
	'action' => 'default'
));

?>

toto sice funguje, ale negeneruji se mi odkazy v modulu eshop :( neexistuje prislusne routovaci pravidlo.

Jedine co me napada, tak bych musel z DB generovat pevna pravidla pro kazdeho uzivatele zvlast.

tj. napriklad

<?php

$router[] = new Route('//test.domena.cz/<presenter>/<action>', array(
	'username' => 'test',
	'domena' => 'domena',
	'tpl' => 'cz',
	'module' => 'Eshop',
	'presenter' => 'Default',
	'action' => 'default'
));

?>

pokud nekdo vite o nejakem elegantnim reseni budu velmi vdecny :)

Filip Procházka
Moderator | 4668
+
0
-

a takhle?

$host = Nette\Environment::getHttpRequest()->uri->host;
$domainMap = (object)Nette\String::match($host, '~^(?:(?P<second>[^.]+)+\.)?(?P<domain>(?P<top>[^.]+)\.(?P<tld>[^.]+))$~i');

$router[] = new Nette\Application\Route('//[!<username [a-zA-Z0-9-]+>].[!<domain [a-zA-Z0-9-]+>].[!<tld [a-zA-Z0-9-]+>]/<presenter>/<action>', array(
        'module' => 'Eshop',
        'presenter' => 'Default',
        'action' => 'default',
	'domain' => $domainMap->domain,
	'tld' => $domainMap->tld,
	'username' => $domainMap->second
));

vynucené volitelné parametry :)

a do úplně základního BasePresenteru, ze kterého dědí všechno si dej

class BasePresenter extends Nette\Application\Presenter
{
	/** @persistent */
	public $domain;

	/** @persistent */
	public $tld;

	/** @persistent */
	public $username;

abys je nemusel přenášet v každém odkazu :)

Editoval HosipLan (26. 12. 2010 11:50)