Dynamicke subdomeny na ruznych domenach
- Rada
- Člen | 9
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
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)