1

我已经定义了 2 条自定义路线。一个 forthreads/:id/:name和另一个 forthreads/tags/:tagName但是第二个与第一个冲突,因为如果我启用两者,那么第一个会中断并将:id字面上视为一个动作,不遵守\d+要求(我也尝试使用纯正则表达式路由,见底部)。

动作“1”不存在并且没有被困在 __call()

我尝试重新安排路线的顺序,但如果我这样做,则threads/tags/:tagName不会正确捕获 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]+'
    )
    )
);


}

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

$router->addRoute(

    'threads',

    new Zend_Controller_Router_Route_Regex(
    'threads/(\d+)/([a-zA-Z]+)',
    array(
        'controller' => 'threads',
        'action'     => 'thread',
    ),
    array(
        1 => 'tagName',
        2 => 'name'
    )
    )
);
4

1 回答 1

0

解决了。

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

感谢 d__asmoka,lutinvert 在#zftalk 上。我会尽快接受(最少 2 天)。

于 2010-01-15T02:37:46.460 回答