Zend Routes冲突

时间:2010-01-15 02:20:43

标签: zend-framework zend-route

我已定义了2个自定义路由。一个用于threads/:id/:name,另一个用于threads/tags/:tagName但是第二个与第一个冲突,因为如果我启用两个,那么第一个断开并将:id字面上视为一个操作,而不是遵守{{ 1}}要求(我也试过使用纯正则表达式路由,见底部)。

  

行动“1”不存在而不存在   陷入__call()

我尝试重新安排路线的顺序,但如果我这样做,那么\d+就无法正确捕获tagName。

我也尝试过禁用默认路由,但之后路由仍然无法正常工作。

这是我的路线初始化功能:

threads/tags/:tagName

我也试过使用纯正的正则表达式路线,但不成功,很可能是因为我做错了:

protected function _initRoutes() {
$fc = Zend_Controller_Front::getInstance();
$router = $fc->getRouter();



$router->addRoute(
    'threads',
    new Zend_Controller_Router_Route('threads/:id/:name',
    array(
        'controller' => 'threads',
        'action'     => 'thread',
    ),
    array(
        'id' => '\d+'
    )
    )
);


$router->addRoute(
    'threads',
    new Zend_Controller_Router_Route('threads/tags/:tagName',
    array(
        'controller' => 'threads',
        'action'     => 'tags',
    ),
    array(
        'tagName' => '[a-zA-Z]+'
    )
    )
);


}

1 个答案:

答案 0 :(得分:0)

<强>解决。

啊,傻,我。 addRoute的第一个参数需要是唯一的名称,并且不像我假设的那样直接对应于控制器。

感谢d__asmoka,来自#zftalk的lutinvert。我会尽快接受(至少2天)。