Как настроить Zend Route для использования дополнительного «параметра» перед параметрами MVC? - PullRequest
1 голос
/ 06 марта 2012

Моя ситуация такова: приложение, над которым я работаю, использует поддомен для определения «кто» является клиентом.то есть: client1.site.com, client2.site.com Это все работает нормально (и я не использую никаких специальных маршрутов).

Теперь, однако, мне нужно поместить свой код в тест' среда.В этом случае, однако, я ограничен одним поддоменом.т.е.: static.testsite.com

Я думал о том, чтобы использовать Zend Routing до такой степени, чтобы я мог преобразовать Запрос следующим образом: static.testsite.com/client1/... или static.testsite.com / client2 /...

Таким образом, первый «параметр» долженбыть именем клиента, за которым следуют стандартные параметры MVC (модуль / контроллер / действие).

Я планирую добавить эту логику маршрутизации в ловушку routeStartup плагина контроллера, доступную только в тестовой среде.

Во-первых, есть ли более простой способ выполнить эту работу, о которой я не задумывался?Во-вторых, если нет, есть ли у кого-нибудь опыт такого рода требований?

В данный момент я экспериментирую с различными маршрутами, предоставляемыми Zend, но до сих пор мне не удавалось (имя клиента сохраняетсястать контролером и т. д.).

Любая помощь очень ценится.Спасибо.

Редактировать: я пытался сделать это безобразно, манипулируя URI запроса объекта запроса.Тем не менее, остальная часть сайта остается без части / clientX / в своих URL, что вызывает дальнейшие проблемы.И обновление всех местоположений с помощью / clientX / portions также не представляется возможным.Поэтому, хотя я могу получить клиента, остальная часть сайта остается неработоспособной, что заставляет меня думать, что маршрут - это единственный путь.

Правка # 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, что вызывает ошибки.Я полагаю, что должно быть принято какое-то решение на основе сеанса после первоначального назначения «клиента».

Если, однако, кто-то знает более элегантный способ сделать это, сообщите мне.Спасибо.

1 Ответ

1 голос
/ 06 марта 2012

Предложение решения на основе Ini, не проверено - только для общей идеи:

routes.withClient.route = ":client/:module/:controller/:action/*"
routes.withClient.defaults.module = "default"
routes.withClient.defaults.controller = "index"
routes.withClient.defaults.action = "index"

Значение client доступно через $request->getParam('client').

...