我有几个模板:
/admin/
/somecode1/somecode2/
/staticpage.htm
尝试输入/ admin /。做到以下:
$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'。
我在这里做错了什么?
答案 0 :(得分:1)
当您定义路线时,首先定义一般路线,然后在之后越来越具体。路由器首先将您的路由设为最后一个路由,然后在匹配的第一个路由器上停止。
这意味着如果'/ admin'也适用于'page_catalog'路线,它会使用此路线,甚至在尝试匹配'adminsys'路线之前。这就是'/ admin'可以是'page_catalog'网址,其中:code
param将是'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'))
));