我花了几个小时试图找到解决方案,但似乎没有太多。
我目前admin.domain.com
指向管理模块,它很容易这样做:
$adminRoute = new Zend_Controller_Router_Route_Hostname(
'admin.domain.com', array(
'module' => 'admin'
)
);
$router
->addRoute('admin', $adminRoute->chain(
new Zend_Controller_Router_Route(
':controller/:action/*',
array(
'controller' => 'index',
'action' => 'index'
))
));
并且所有其他路由都将按照默认路由工作,因此www.domain.com/module/controller
两者www.domain.com/controller
都按预期工作。
但是,如果我当前在admin
模块内部并且想要组装一个指向www.domain.com
路由的 URL,那么如何做到这一点?
不幸的是,将默认路由设置为主机名路由并不是一个简单的案例,www.domain.com
因为这样您就不会从路径中的“可选”模块参数中受益。例如
$wwwRoute = new Zend_Controller_Router_Route_Hostname(
'www.domain.com', array(
'module' => 'default'
)
);
$router
->addRoute('default', $wwwRoute->chain(
new Zend_Controller_Router_Route(
':module/:controller/:action/*',
array(
'controller' => 'index',
'action' => 'index'
))
));
将简单地以格式构建所有路径,www.domain.com/default/controller/action
而不是www.domain.com/controller/action
文档建议使用默认路由,Zend_Controller_Router_Route_Module
但我已经尝试过了,似乎还有更多。
有任何想法吗?
编辑:我怀疑您要么需要采取一种方式,要么需要采取另一种方式,即在子域上拥有所有模块,然后严格像这样路由请求/controller/action/*
,或者将模块作为路由路径的一部分。否则,可以通过两个 URL 访问一个模块 -module.domain.com
而且www.domain.com/module
- 显然有办法解决这个问题,当然,您可以为每个模块设置特定的路由,从而不依赖默认 Zend 路由的“可选”模块特性。