0

我不知道我做错了什么。我有两条名为 Zend 的路线:

$route = new Zend_Controller_Router_Route(
                    'catalog/:categoryIdent/:productIdent/',
                    array(
                        'action' => 'viewproduct',
                        'controller' => 'catalog',
                        'module' => 'eshop',
                        'categoryIdent' => '',
                        'productIdent' => ''                        

                    ),
                    array(
                        'categoryIdent' => '[a-zA-Z-_0-9]+',
                        'productIdent' => '[a-zA-Z-_0-9]+'
                    )
    );
    $router->addRoute('catalog_category_product', $route);

    // catalog category route
    $route = new Zend_Controller_Router_Route(
                    'catalog/:categoryIdent/:page/',
                    array(
                        'action' => 'viewcategory',
                        'controller' => 'category',
                        'module' => 'eshop',
                        'categoryIdent' => '',
                        'page' => ''

                    ),
                    array(
                        'categoryIdent' => '[a-zA-Z-_0-9]+'
                    )
    );

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

当我调用 catalog_category 时,一切都很好,但是当我尝试调用 catalog_category_product 时,使用了第二条路线的 viewcategory 操作。这意味着它与 :page 变量在 url 中的问题,resp。URL中的参数数量相同?我认为这不是必需的,我想获得两条不同但相似的路线 - 例如:

对于类别 - 目录/类别 1/1

对于产品 - catalog/category1/product1(无页码)

当我将路线 catalog_category_product 的形式更改为 catalog/:categoryIdent/something/:productIdent/ 所以它的工作

这是路由调用

$this->url(array('categoryIdent' => categoryIdent, 'productIdent' => productIdent), 'catalog_category_product', true);

$this->url(array('categoryIdent' => 'cerveny-cedr', 'page' => 'pageNumber'), 'catalog_category', true);

谢谢你的帮助

4

1 回答 1

1

请记住,路由是以相反的顺序检查的,因此 ZF 路由器在匹配 URL 时会在catalog_category路由之前检查路由。catalog_category_product因此,参数的数量不是问题,但由于您没有对“页面”参数施加任何限制,所有通常与您的 URL 匹配的catalog_category_productURL 都将被匹配catalog_category

听起来“页面”应该是数字,因此将限制添加到您的第二条路线应该可以解决问题。

于 2013-05-25T13:45:58.050 回答