Моя ситуация такова: Приложение, в котором я работаю, использует поддомен для определения «кто» является клиентом. ie: client1.site.com, client2.site.com Все это работает нормально (и я не использую никаких специальных маршрутов).Как настроить Zend Route для использования дополнительного параметра перед параметрами MVC?
Теперь, однако, мне нужно поместить мой код в «тестовую» среду. В этом случае, однако, я ограничен одним поддоменом. т.е. static.testsite.com
Моя мысль заключалась в использовании Zend маршрутизации до такой степени, так что я могу преобразовать запрос следующим образом: static.testsite.com/client1/... или static.testsite.com/client2/...
Таким образом, первый параметр «» должен быть имя клиента с последующим стандартными параметрами MVC (модуль/контроллер/действие).
Я планирую добавить эту логику маршрутизации в routeStartup hook плагина контроллера, доступного только в тестовой среде.
Во-первых, есть ли более простой способ выполнить эту работу, о которой я не думал? Во-вторых, если нет, есть ли у кого-нибудь опыт такого рода требований?
В настоящее время я экспериментирую с различными маршрутами, которые предоставляет Zend, но до сих пор я не увенчался успехом (имя клиента продолжает становиться контроллером и т. Д.).
Любая помощь очень ценится. Спасибо.
Редактировать: Я попытался сделать это уродливо, манипулируя запросом uri объекта запроса. Однако это оставляет остальную часть сайта без части/clientX/в своих URL-адресах, тем самым вызывая дополнительные проблемы. И обновление всех местоположений с помощью/clientX/частей тоже не реально. Поэтому, хотя я могу получить клиент, остальная часть сайта остается нефункциональной, что заставляет меня думать, что Маршрут - единственный способ.
Редактировать # 2: Я получил его работу со следующим кодом;
// within a Controller Plugin at routeStartup
$oFrontController = Zend_Controller_Front::getInstance();
$oRouter = $oFrontController->getRouter();
$oNewDefaultRoute = new Zend_Controller_Router_Route(
':testClient/:controller/:action/*',
array(
'module' => 'default',
'controller' => 'index',
'action' => 'index',
'testClient' => null,
)
);
$oRouter->addRoute('default', $oNewDefaultRoute);
Проблема осталась, однако, поскольку она не влияет на какие-либо существующие URL-адреса. Поэтому попытка доступа к любому из них приводит к месту без testClient, что вызывает ошибки. Я считаю, что некоторые решения на основе сеанса после первоначального назначения клиента должны быть приняты.
Если, однако, кто-то знает более элегантный способ сделать это, дайте мне знать. Спасибо.
Почему бы не использовать client1test.testsite.com? Фактически это отдельный клиент, но это позволяет вам иметь совершенно отдельный тест против производственной среды. – Ashley
Это было бы идеально, поскольку на самом деле это не требовало бы никаких изменений.К сожалению, проблема в том, что это фактические домены/поддомены, и из-за этого я не могу создавать поддомены для каждого из этих клиентов в тестовой среде. Как упоминалось выше, «я ограничен одним поддоменом». –
Является ли '/ clientX' частью _always_ в URL? У вас есть случаи, когда эта часть опущена, а первый параметр - модуль или контроллер? – bububaba