开发者

ZF: routing. How to make correct route?

I have several templates:

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

Trying to enter on /admin/. Doing follow:

$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开发者_如何学C_Controller_Router_Route_Regex('([\wА-Яа-я\-\_]+)\.(htm|html)', array('module' => 'default', 'controller' => 'static', 'action' => 'index')
));

also I tried to change 'adminsys' on :

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

or

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

But all time it routes on 'page_catalog'. If I comment it, I can enter /admin/. But not with 'page_catalog'.

What I'm doing wrong here?


When you define routes, you define the general one first, and then you go more and more specific after. The router takes your routes 'last one first' and stops on the first that matches.

This means that if '/admin' could also work for the 'page_catalog' route, it would use this one, before even trying to match 'adminsys' route. And that's the thing, '/admin' could be a 'page_catalog' url where :code param would be 'admin'.

The second variant of the adminsys route is a good one, you just have to make it the last one of your routes in order to avoid any more general route to match first :

$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'))
));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜