[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Привязать модуль к поддомену Yii
kovaldm
Привет.
Проблема такая.
Есть сайт на Yii 1.1.7 содержащий админку и пользовательскую часть.
Админка должна располагаться по адресу http://domen1.site.com
Пользовательская часть по адресу http://domen2.site.com

Делал через UrlManager как написано здесь.

Не совсем получается.
Делаю так:

Правило
'http://domen2.site.com/' => 'user/', 

срабатывает и открывается дефолтная страница модуля user.

Но если к этому правилу добавить какие - либо именованные параметры для определения пары controller/action, то они почему-то берутся
не из модуля и соответственно выдается 404 ошибка.

Хотя контроллер и соотвтствующий актион есть в модуле.

То есть такой запрос
http://domen1.site.com/user/test

Откроет дефолтную страничку контроллера test модуля user.

А правило
'http://domen2.site.com/<c:\w+>' => 'user/<c>' 

не срабатывает на запрос
http://domen2.site.com/test

Хотя, насколько я понял, должно.



Спустя 1 час, 56 минут, 1 секунда (10.11.2011 - 15:45) EvilDev написал(а):
Сначала пойми как он работает.
Например вот выражение
'<id:\w+>' => 'page/index'

т.е. site.com/kakaya_to_stranica
id = kakaya_to_stranica
И эта переменная будет направлена в контроллер page действие index

Спустя 14 минут, 22 секунды (10.11.2011 - 16:00) kovaldm написал(а):
Да, и будет доступна как $_GET['id'] или ее можно подставить во вторую часть правила.
Но меня интересует почему, если в правиле написано
'http://domain.site.com/controller/action' => 'user/controller/action',

при запросе
http://domain.site.com/controller/action

(то есть пока даже без регулярок)
поиск контроллера производится не в
modules/user/controllers

а в
protected/controllers

И если вывести массив _GET, то r==controller/action, хотя в правиле написано user/controller/action.

При этом правило
'http://domain.site.com/' => 'user/controller/action',

сработает нормально и покажет результат работы нужного контроллера.
То есть пока идет голый запрос без дополнительных параметров, то все работает. Но если добавить что-то после, то движок сразу "забывет" про существование модуля.

Спустя 6 минут, 47 секунд (10.11.2011 - 16:06) EvilDev написал(а):
А потому, что все контроллеры хранятся в protected/controllers

Спустя 11 минут, 2 секунды (10.11.2011 - 16:17) kovaldm написал(а):
Контроллеры модуля хранятся в modules/moduleId/controllers.
И вызываются при помощи moduleId/controller/action. Правильно?
А как мне тогда создать правило чтобы он искал в кнтроллерах модуля?
Если правило
'http://domain.site.com/controller/action' => 'user/controller/action',
не срабатывает.

Как я понял urlmanager при совпадении url с шаблоном преобразует его в путь, который указан в правиле.
Может еще где в конфиге прописать нужно что-то?

Для автозагрузчика пути я прописал.
'import'=>array(    
'application.models.*',
'application.components.*',
'application.modules.user.models.*',
'application.modules.user.components.*',
'application.modules.user.controllers.*',
),

В классе модуля.
public function init()
{
// this method is called when the module is being created
// you may place code here to customize the module or the application

// import the module-level models and components

$this->setImport(array(
'application.modules.user.models.*',
'application.modules.user.controllers.*',
));

}

Может в классе модуля еще что-то надо? В инете инфы очень мало.

Спустя 1 час, 3 минуты, 1 секунда (10.11.2011 - 17:20) kovaldm написал(а):
Похоже что придется расширять urlManager.

Спустя 5 часов, 59 минут, 19 секунд (10.11.2011 - 23:20) kovaldm написал(а):
В общем с расширением оказалось не так просто. Пришлось добавить свой код прямо в исходники.

Вот это добавил
        $rules = require(YiiBase::getPathOfAlias('ext') .'/subdomains.php');

$subdomain = explode('.',getenv('HTTP_HOST'));
$subdomain = $subdomain[0];
if(array_key_exists($subdomain, $rules))
$module = $rules[$subdomain];
else
$module = '';

return $return? $module .'/'. $return : $return;

Работать работает, только вот нехорошо как-то в исходниках ковыряться. Но, к сожалению, способ, указанный в доке, у меня не сработал.

Спустя 1 час, 17 минут, 58 секунд (11.11.2011 - 00:38) Игорь_Vasinsky написал(а):
оОо.. ребята. я с вами. Тоже работать буду на Yii, так чо ваши контакты записал.


_____________
sdfcfgvbgmlmknhvdfgctghvbj
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.