Имя хоста и маршрут на основе регулярных выражений в Zend Framework - PullRequest
1 голос
/ 28 февраля 2012

Можно ли создать в Zend Framework маршрутизатор, который может сопоставлять имена хостов, используя подстановочные знаки или регулярные выражения (независимо от того, сколько частей содержится в имени хоста)?

Я могу создать маршрут, который соответствует имени хоста

   $externalHostname = new Zend_Controller_Router_Route_Hostname(
        'ext.mysite.com', array(
            'module'=> 'external',
    ));

Но что, если бы я хотел добиться чего-то подобного:

   $externalHostname = new Zend_Controller_Router_Route_Hostname(
        'ext.*', array(
            'module'=> 'external',
    ));

где любое имя хоста, начинающееся с "ext." направляется во «внешний» модуль, независимо от того, сколько уровней поддоменов имеет имя хоста, поэтому

  • ext.mysite.com
  • ext.test.mysite.com

будет совпадать.

Как этого достичь?

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Что делает Zend Router?

Ответ: Он в основном устанавливает и сообщает Front Controller, какой текущий модуль / контроллер / действие. А затем Front-контроллер сообщает Zend Dispatcher, что нужно перейти к moduleFolder / controllerFolder и выполнить actionMethod.

Теперь вы можете проверить указанное выше состояние и настроить роутер вручную.

Теперь вопрос, где вы должны проверить и настроить этот роутер?

Одним из решений является: - в файле public / index.php вы можете зарегистрировать его как плагин $ frontController-> registerPlugin ("my_router"), и my_router должен расширять "Zend_Controller_Plugin_Abstract". Внутри этого конструктора класса my_router вы можете установить свой собственный маршрутизатор.

Я бы сказал, просто проверьте базовый поток Zend Framework (Что происходит внутри Zend Framework при отправке запроса?)

0 голосов
/ 28 февраля 2012

Вы не можете достичь этого с помощью Zend_Controller_Router_Route_Hostname. Если бы вы намеревались соответствовать только ограниченному числу уровней поддоменов (скажем, 2-4), это могло бы сработать. В этом случае вы должны добавить несколько маршрутов имени хоста для каждого случая.

Но без ограничений - я так не думаю.

...