ZF:路由。如何制作正确的路线?

时间:2011-09-25 17:59:23

标签: php zend-framework routing routes

我有几个模板:

/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'。

我在这里做错了什么?

1 个答案:

答案 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'))
));