Маршруты имени хоста Zend Framework: Маршрутизация при игнорировании поддоменов - PullRequest
1 голос
/ 19 января 2011

Итак, я хочу создать Zend_Controller_Router_Route_Hostname, который соответствует следующему:

  • example.com
  • www.example.com
  • stage.example.com
  • dev.example.com
  • andrew.dev.example.com
  • joe.dev.example.com

Я могу 'Кажется, я не могу понять, как создать маршрут, который может соответствовать всем этим вещам.До «example.com» может быть несколько поддоменов, поэтому все, что раньше, не имеет значения.Вот что у меня есть:

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(':sandbox.:environment.example.com', array('controller' => 'events', 'event-id' => $eventId));

Ответы [ 2 ]

1 голос
/ 20 января 2011

Я не думаю, что можно иметь несколько поддоменов, совпадающих в одном маршруте имени хоста. Итак, вот что вам нужно сделать:

$hostnameRoutes = array(
    new Zend_Controller_Router_Route_Hostname('example.com', array('controller' => 'events', 'event-id' => $eventId)),
    new Zend_Controller_Router_Route_Hostname(':subdomain.example.com', array('controller' => 'events', 'event-id' => $eventId)),
    new Zend_Controller_Router_Route_Hostname(':sandbox.dev.example.com', array('controller' => 'events', 'event-id' => $eventId))
);

$homepageRoute =         new Zend_Controller_Router_Route_Static('',       array('action' => 'overview'));
$eventPagesRoute =       new Zend_Controller_Router_Route(':action/*',     array('action' => 'overview'));
$staticEventPagesRoute = new Zend_Controller_Router_Route('page/:page-id', array('action' => 'static-page'));

foreach ($hostnameRoutes as $i => $hostnameRoute) {
    $router->addRoute('sports_homepage' . $i,          $hostnameRoute->chain($homepageRoute));
    $router->addRoute('sports_event_pages' . $i,       $hostnameRoute->chain($eventPagesRoute));
    $router->addRoute('sports_static_event_Page' . $i, $hostnameRoute->chain($staticEventPagesRoute));
}

Примечание: убедитесь, что имена ваших маршрутов уникальны (обратите внимание на объединение $i, чтобы сделать их уникальными). Я забыл об этом в первый раз и не мог понять, почему это не сработало.

1 голос
/ 20 января 2011

Вы не можете использовать один маршрут для нелинейного отображения с более чем двумя вариантами, поэтому вам придется использовать более одного;) Без знания целей каждого домена трудно привести какие-либо примеры.Предполагая, что example.com и www.example.com одинаковы и являются маршрутом по умолчанию, а stage и dev отображаются в соответствующий модуль (а также andreaw и joe в качестве параметров) (и добавляются в маршрутизаторкурс):

$stageRoute = new Zend_Controller_Router_Route_Hostname('stage.example.com', array('module' => 'stage');
$devRoute = new Zend_Controller_Router_Route_Hostname(':user.dev.example.com', array('module' => 'dev');

Это отобразит следующее (:module/:controller/:action):

  • stage.example.com на stage/index/index
  • dev.example.com на dev/index/index
  • joe.example.com до dev/index/index/user/joe
  • www.example.com до default/index/index

Словами: если поддомен stage и ничего больше, перейдите к модулю stage с параметрами по умолчанию.Если subdomain равно dev, перейдите к модулю dev с параметром user.В противном случае используйте Zend-маршрут по умолчанию.
Будьте осторожны, чтобы маршрутизаторы с именами хостов соответствовали любому пути.Так что вы, вероятно, должны сопоставить путь позади него с другим маршрутом и использовать цепной маршрутизатор .

Для сценического маршрута это может выглядеть так:

$stageRoute = new Zend_Controller_Router_Route_Hostname('stage.example.com', array('module' => 'stage');
$pathRoute = new Zend_Controller_Router_Route(':revision', array('controller' => 'browse'));
$stageRoute->chain($pathRoute);

Это отобразит stage.example.com/5434 на stage/browse/index/revision/5434.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...