Zend Route:如果链接以/ something开头,则忽略其他规则

时间:2011-02-16 14:55:28

标签: zend-framework zend-route

我有两个模块应该超过其他网址,基本上

/ management / category / edit / id / 1(编辑类别页面)

/ management / category / index(管理模块中的类别索引页)

/ management / category(管理模块中的类别索引页)

/ women-like-men / category(从/ default / category / view / id / women-like-men路由的URL)

以上规则是:

    $router->addRoute('view-category',      new Zend_Controller_Router_Route(':id/category/:page',  array('module' => 'default', 'controller' => 'category', 'action' => 'view', 'page' => null)));
    $router->addRoute('management/category',    new Zend_Controller_Router_Route('management/category/',    array('module' => 'management', 'controller' => 'category', 'action' => 'index')));

有很多像这样的类似页面“冲突”(画廊,电影,用户)等。

我真正想要的是一个规则,说/ management / *路由到模块管理/控制器/操作并忽略下面的规则,任何与/管理乘坐的规则。无论如何,用户/画廊/电影/类别被称为管理的可能性很低。

有可能吗?

编辑,我已经做到了:

    $router->addRoute('administration',         new Zend_Controller_Router_Route_Regex('management/?(.*)/?(.*)', array('module' => 'management'), array(1 => 'controller', 2 => 'action')));

/ management / category工作正常,但结果为404后的任何内容

1 个答案:

答案 0 :(得分:1)

这应该是直截了当的。定义路由的顺序很重要 - 它们按相反顺序检查,因此管理规则要“覆盖”您希望最后定义的其他规则(即在所有其他路径之后)。这样的东西(基本上就是你的东西)应该有效:

$route = new Zend_Controller_Router_Route(
    'management/:controller/:action/*',
    array(
        'module' => 'management'
        'controller' => 'index',
        'action' => 'index'
    )
);
$router->addRoute('management', $route);

如果您的任何管理URL在此之后仍然是404',那么它们不匹配该路由,因此它需要调整或者您需要一些其他管理路由来匹配其他情况。