2010-11-02 48 views
2

我想创建以下默认路由定制“REST风格的”路线:Zend Framework:如何解决这些冲突的自定义路由?

Default Route   =>  Desired Route 
============================================= 
/events/calendar    /events/calendar (stays the same, uses the default route /:controller/:action) 
/events/view/id/47    /events/47 
/events/overview/id/47   /events/47/overview 
/events/page/id/47/page-id/100 /events/47/page/100 

我想保持缺省路由,而是提高了先前的默认路由,以提高可读性。我的路线应该如何实现?这是我到目前为止,但他们互相冲突,所以我知道他们不正确。

$router->addRoute('eventsCalendar', new Zend_Controller_Router_Route_Static('/events/calendar', array('controller' => 'events', 'action' => 'calendar'))); 
$router->addRoute('eventPage', new Zend_Controller_Router_Route('/events/:id/:action/*', array('controller' => 'events', 'action' => 'view'))); 

回答

2

通过改变我添加路由的顺序(将静态路由移到末尾),它修复了冲突。不过,我不确定这是否是最好的方法。

$router->addRoute('eventPage', new Zend_Controller_Router_Route('/events/:id/:action/*', array('controller' => 'events', 'action' => 'view'))); 
$router->addRoute('staticEventPage', new Zend_Controller_Router_Route('/events/:id/page/:page-id', array('controller' => 'events', 'action' => 'static-page'))); 
$router->addRoute('eventsCalendar', new Zend_Controller_Router_Route_Static('/events/calendar', array('controller' => 'events', 'action' => 'calendar'))); 
+2

这是正确的做法。 ZF以相反的顺序匹配路线,所以你希望你的最具体的路线最后。 – 2010-11-02 21:06:56

+0

+1当我进入自定义路线时,我会稍后在我的项目中检查这一点。 – rvdavid 2010-11-02 22:47:30