Hostname and Custom routing in Zend Framework don't work together for me

会有一股神秘感。 提交于 2019-12-11 03:52:51

问题


I am building an application that uses hostname routing to detect subdomains like

user1.example.com user2.example.com

and also have custom routes like user1.example.com/login

This works well so far, however when I add custom routes they do not work. I have searched and read a lot but seems there is something I am missing. Here is what I have so far:

//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));
}

When I go to a custom route like http://user1.example.com/login I get the error: 'Invalid controller specified (login)' which means my custom route is not being recognized. I am also not sure if the way I am adding the default route is correct and necessary. If I remove that code then it doesn't work. So my problem really is that I would like my hostname matching, custom routes and default routes to all work. If you can spot where I'm going wrong please help, I have read previous related posts all over on routes, chaining, default routes etc (including this very related one: How do I write Routing Chains for a Subdomain in Zend Framework in a routing INI file?) but haven't found the solution so far.


回答1:


You should be able to setup your routing using a custom param in the route:

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

If your apache/hostfile etc are configured correctly going to test.domain.dev should load the index action in your indexController where you could get the :subdomain param:

echo $this->getRequest()->getParam('subdomain');

Also, as you discovered, the order of the routes is very important. See also Zend Router precedence for more info about this.



来源:https://stackoverflow.com/questions/8204543/hostname-and-custom-routing-in-zend-framework-dont-work-together-for-me

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!