我的Zend Framework路由没有正确堆叠

时间:2012-02-22 13:34:59

标签: zend-framework

我的zend框架应用程序中有一个模块(站点)。我要做的是首先检查控制器/操作是否存在,如果不存在则尝试将URL与某些自定义路由匹配。

我在_bootstrap.php中的代码如下:

$router = $this->frontController->getRouter();
$router->removeDefaultRoutes();

// catalog category product route
$route = new Zend_Controller_Router_Route(
        ':categoryIdent/:productIdent',
        array(
            'action'        => 'view',
            'controller'    => 'product',
            'module'        => 'site',
            'categoryIdent' => '',
            'productIdent' => ''
        ),
        array(
            'categoryIdent' => '[a-zA-Z-_0-9]+',
            'productIdent'  => '[a-zA-Z-_0-9]+'
        )
);

$router->addRoute('catalog_category_product', $route);


$router->addDefaultRoutes();

我知道Zend Framework中的路由是向后匹配的。所以我尝试了以下网址。

  1. example.com/site/index/index - >确定(执行操作/控制器=>索引/索引)
  2. example.com/bags/bag-7 - >确定(执行操作/控制器=>产品/视图)
  3. example.com/index/index - >错误(执行操作/控制器=>产品/视图,但这应该是默认路由的一部分,最后定义)
  4. 这是问题,我不明白为什么不应用默认控制器/操作路由。

1 个答案:

答案 0 :(得分:0)

您的第三个示例与catalog_category_product-route的模式匹配。这就是发送到产品/视图的原因。

您可以尝试将需求添加到:productIdent和/或:categoryIdent,以使索引/索引与这些要求不匹配。

The reference manual explains how to set variable requirements

编辑:我错过了,你已经提出了要求。但索引/索引仍然匹配:categoryIndent /:productIndent。你可以使用以下正则表达式:productIndent,假设它总是word - dash - number:

'/^([a-z]+-[0-9]+)$/'