注意:反匹配
路由被 以相反的順序相匹配,以便確保 最通用的路由被定義 第一。
(Zend_Controller_Router)
因此,你必須首先定義所有其他子域的路由,那麼具體的:
$user = new Zend_Controller_Router_Route_Hostname(
':subdomain.site.com',
array(
'controller' => 'user'
)
);
$location1 = new Zend_Controller_Router_Route_Hostname(
'c.site.com',
array(
'controller' => 'location'
)
);
$location1 = new Zend_Controller_Router_Route_Hostname(
'd.site.com',
array(
'controller' => 'location'
)
);
// other definitions with known subdomain
$router->addRoute($user); // most general one added first
$router->addRoute($location1);
$router->addRoute($location2);
// add all other subdomains
更新更新的問題:
1)本真取決於您想要將子域路由到的參數的差異。在你的例子中,你將它們全部路由到相同的模型和控制器,並將實際的子域添加爲參數。這可以通過上面發佈的用戶路由輕鬆完成。在那裏子域被設置爲參數子域($request->getParam("subdomain")
)。如果您希望子域名成爲已知控制器/模型的行爲,您可以用:action
替換:subdomain
。但是,只要你有每個子域的其他控制器/模型,我擔心你必須循環它們(或使用配置文件)。對於你的問題提供的示例,路線根本就這個樣子:
$user = new Zend_Controller_Router_Route_Hostname(
':param1.site.com',
array(
'controller' => 'user'
)
);
// routes "subdomain".site.com to defaultModul/userController/indexAction with additional parameter param1 => subdomain.
只要你沒有在你的子域路由他們的任何模式就很難在一般的方式。
2)這是router chains發揮作用的一個例子。外部路由將是處理子域的主機名路由,而內部路由將處理:a/:b
部分。這可能看起來像這樣,例如:
$user->chain(new Zend_Controller_Router_Route(':a/:b'));
來源
2010-11-10 08:52:06
Fge
對不起,似乎代碼格式不起作用? – Komang 2010-11-10 13:02:12