所以我想创建一个匹配以下内容的Zend_Controller_Router_Route_Hostname
:
我似乎无法弄清楚如何创建一个可以匹配所有这些东西的路线。在“example.com”之前可以有多个子域,因此它之前的所有内容并不重要。这是我到目前为止所做的:
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(':sandbox.:environment.example.com', array('controller' => 'events', 'event-id' => $eventId));
答案 0 :(得分:1)
你不能有一个路由用于非线性映射,有两个以上的选择,所以你必须使用多个;但是如果不知道每个域的目标,就很难给出任何例子。
假设example.com
和www.example.com
是相同的,并且都是默认路由,stage
和dev
都映射到其respecitve模块(andreaw
和{{1作为参数)(当然也加入了路由器):
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
单词:如果sudomain为default/index/index
而没有其他内容,请使用默认参数转到stage
模块。如果stage
为subdomain
,请使用参数dev
转到dev
模块。否则使用默认的zend路线
请注意,主机名路由器确实匹配任何路径。所以你可能应该将它背后的路径与另一条路线匹配并使用chain router。
对于舞台路线,这可能如下所示:
user
将$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
。
答案 1 :(得分:1)
我认为在单个主机名路由中有多个子域匹配是不可能的。所以这就是你要做的事情:
$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
以使其唯一)。我第一次忘记了,无法弄清楚它为什么不起作用。