Запустите один и тот же сайт Zend_Framework на нескольких доменах с Zend_Controller_Router_Route_Hostname

Мне нужно запустить один и тот же сайт на основе zend_framework для работы в нескольких доменах, и мое приложение должно знать, в каком домене оно работает. Я подумал, что было бы неплохо использовать Zend_Controller_Router_Route_Hostname, но я столкнулся с некоторыми проблемами.

У меня есть следующий код в моей загрузке

$ctrl = Zend_Controller_Front::getInstance();
$router = $ctrl->getRouter();
$router->removeDefaultRoutes();     

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    ':sub-domain.:domain.:tld'
);

$defaultRoute = new Zend_Controller_Router_Route(
    ':controller/:action/*',
    array(
        'controller' => 'index',
        'action' => 'index'
    )
);
$router->addRoute('default',$hostnameRoute->chain($defaultRoute));

Я получаю следующую ошибку "не указан субдомен". Я думаю, что отследил это до того, что $this->url в моем файле макета использует определенные маршруты для сборки URL до того, как маршрут сопоставляется с URL-адресом запроса. Если я устанавливаю значения по умолчанию для маршрута имени хоста, я не получаю сообщение об ошибке, но URL-адреса в макете используют значения по умолчанию вместо значений в текущем имени хоста.

Кто может помочь мне решить эту проблему?

2 ответа

Вы должны определить значение по умолчанию для поддоменов. Изменить $defaultRoute к этому:

$defaultRoute = new Zend_Controller_Router_Route(
    ':controller/:action/*',
    array(
        'controller' => 'index',
        'action' => 'index'
    )
);

Он должен работать.

У вас проблема с генерацией URL. Вы должны указать параметры для переменных в определении маршрута для вашего имени хоста следующим образом:

echo $this->url(array('sub-domain' => 'your-subdomain-here', 'domain' => 'your-domain', 'tld' => 'com'), 'default');

В противном случае помощник Zend URL не сможет сгенерировать URL для вашего определения: поддомен.: Домен.: Tld. Приведенный пример сгенерирует этот URL: your-subdomain-here.your-domain.com/current_controller/current_action

Также проверьте, является ли поддомен допустимым именем переменной. Попробуйте изменить его на поддомен.

Другие вопросы по тегам