2011-09-25 41 views
1

我有几个模板:ZF:路由。如何做出正确的路线?

/admin/ 
/somecode1/somecode2/ 
/staticpage.htm 

试图进入上/管理/。这样做如下:

$router->addRoutes(array(
     'adminsys' => new Zend_Controller_Router_Route('/:module/:controller/:action/*', array('module' => 'admin', 'controller' => 'index', 'action' => 'index')), 
     'page_catalog' => new Zend_Controller_Router_Route('/:code/:page', array('module' => 'default', 'controller' => 'Staticcatalog', 'action' => 'index', 'code' => '', 'page' => '')), 
     'static'  => new Zend_Controller_Router_Route_Regex('([\wА-Яа-я\-\_]+)\.(htm|html)', array('module' => 'default', 'controller' => 'static', 'action' => 'index') 
)); 

我也试图改变 'adminsys' 上:

'adminsys' => new Zend_Controller_Router_Route('/admin/:controller/:action/*', array('module' => 'admin', 'controller' => 'index', 'action' => 'index')), 

'adminsys' => new Zend_Controller_Router_Route('/admin/*', array('module' => 'admin', 'controller' => 'index', 'action' => 'index')), 

但所有时间 'page_catalog' 它的路线。 如果我评论它,我可以输入/ admin /。但不是'page_catalog'。

我在做什么错在这里?

回答

1

当你定义路线时,你首先定义一个通用路线,然后你就会越来越具体。路由器将您的路线“最后一个”放在第一个匹配的位置。

这意味着如果'/ admin'也可以用于'page_catalog'路线,那么即使尝试匹配'adminsys'路线,它也会使用这一路线。这就是'/ admin'可能是'page_catalog'url,其中:code参数为'admin'。

的adminsys路线的第二个变量是一个很好的,你就必须让你的路由的最后一个,以避免任何更一般的途径首先匹配:

$router->addRoutes(array(
     'page_catalog' => new Zend_Controller_Router_Route('/:code/:page', array('module' => 'default', 'controller' => 'Staticcatalog', 'action' => 'index', 'code' => '', 'page' => '')), 
     'static'  => new Zend_Controller_Router_Route_Regex('([\wА-Яа-я\-\_]+)\.(htm|html)', array('module' => 'default', 'controller' => 'static', 'action' => 'index')), 
     'adminsys' => new Zend_Controller_Router_Route('/admin/:controller/:action/*', array('module' => 'admin', 'controller' => 'index', 'action' => 'index')) 
));