Я делал подобные вещи в одном из моих главных приложений ZF. Это сложный вопрос из трех частей, но, надеюсь, это поможет вам начать в правильном направлении.
Первый - файл cookie сеанса. Вам нужно будет использовать параметр домена подстановочного знака, когда вы устанавливаете cookie сессии. В вашей начальной загрузке или где-то до того, когда вы обычно начинаете сеанс, включите строку, такую как:
Zend_Session::start(array('cookie_domain' => '.domain.com'));
Обратите внимание на точку (".") Перед "domain.com". Это делает cookie применимым для domain.com
, а также для всех поддоменов в нем.
Второй - это URL вашего сайта. Вы можете использовать метод gotoUrl()
помощника действий Redirector. В конце метода действия, когда вы хотите перенаправить пользователя, используйте следующую строку:
$this->_redirector->gotoUrl('http://domain.com/somewhere/else');
Конечно, вы можете захотеть собрать строку URL другими способами, например, сохранить домен в параметре конфигурации и объединить путь, используя один из собственных методов ZF для создания пути URL. См. Документацию для Zend_Controller_Action_Helper_Redirector
для получения дополнительной информации. Вам также нужно быть осторожным со всеми URL-адресами на вашем сайте и убедиться, что в каждую ссылку включен правильный домен.
Третий - это то, как ваше приложение интерпретирует маршруты, когда задействованы субдомены. Есть несколько способов сделать это, но один из них - создать модуль в вашем приложении, который соответствует каждому поддомену, который вы хотите использовать. Затем используйте Controller Plugin , чтобы перехватить нормальный механизм маршрутизации ZF и установить имя модуля соответствующим образом, основываясь на поддомене. Что-то вроде:
class My_Controller_Plugin_RouteMySubdomains extends Zend_Controller_Plugin_Abstract {
public function routeShutdown(Zend_Controller_Request_Abstract $request) {
$hostname = $request->getHttpHost();
if (strlen($hostname) > strlen('domain.com')) {
$moduleName = preg_replace("/\.domain\.com$/", '', $hostname);
$request->setModuleName($moduleName);
}
}
}
Вы должны указать ZF использовать этот плагин. Если вы используете Zend_Application
с файлом application.ini
для базовой конфигурации, вам нужно добавить следующую строку:
resources.frontController.plugins.routeMySubdomains = "My_Controller_Plugin_RouteMySubdomains"
Удачи!