我正在构建一个使用主机名路由来检测子域名的应用程序,如
user1.example.com user2.example.com
并且还有自定义路线,例如user1.example.com/login
到目前为止这种方法效果很好,但是当我添加自定义路由时,它们不起作用。我搜索并阅读了很多,但似乎有一些我缺少的东西。以下是我到目前为止的情况:
//my routes in routes.ini
[development]
routes.login.type = "Zend_Controller_Router_Route"
routes.login.route = "/login"
routes.login.defaults.controller = "user"
routes.login.defaults.action = "login"
//This part in Bootstrap file
$this->bootstrap('frontController');
$router = $this->frontController->getRouter();
$routerConfig = new Zend_Config_Ini(
APPLICATION_PATH . '/configs/routes.ini',
'production'
);
//I create a default route
$routeDefault = new Zend_Controller_Router_Route_Module(
array(),
$this->frontController->getDispatcher(),
$this->frontController->getRequest()
);
$router->addConfig($routerConfig, 'routes');
// hostname route
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
':username.mysite.com',
array(
'module' => 'default',
'controller' => 'index',
'action' => 'index',
)
);
//I add the default route.
$router->addRoute('default', $routeDefault);
//I chain the routes so that all routes have subdomain routing too
foreach ($router->getRoutes() as $key => $theroute) {
$router->addRoute($key, $hostnameRoute->chain($theroute));
}
当我转到http://user1.example.com/login之类的自定义路线时,我收到错误:'指定的控制器无效(登录)',这意味着我的自定义路线无法被识别。我也不确定我添加默认路由的方式是否正确和必要。如果我删除该代码,那么它不起作用。所以我的问题是我希望我的主机名匹配,自定义路由和默认路由到所有工作。如果你能发现我出错的地方请帮忙,我已经阅读了以前相关的帖子,包括路线,链接,默认路线等(包括这个非常相关的帖子:How do I write Routing Chains for a Subdomain in Zend Framework in a routing INI file?)但是没有找到解决方案所以远。
答案 0 :(得分:0)
您应该可以使用路径中的自定义参数设置路由:
routes.testdynamicsubdomain.type = "Zend_Controller_Router_Route_Hostname"
routes.testdynamicsubdomain.route = ":subdomain.domain.dev"
routes.testdynamicsubdomain.defaults.module = public
routes.testdynamicsubdomain.defaults.controller = index
routes.testdynamicsubdomain.defaults.action = index
如果您的apache / hostfile等配置正确,则test.domain.dev应该在indexController中加载索引操作,您可以在其中获取:subdomain param:
echo $this->getRequest()->getParam('subdomain');
另外,正如您所发现的,路线的顺序非常重要。有关此内容的详情,另请参阅Zend Router precedence。