Zend路线两条路线需要相同数量的参数

时间:2013-05-25 12:30:19

标签: zend-framework params zend-route

我不知道自己做错了什么。我有两个名为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动作。这意味着它的问题:url中的页面变量,resp。 URL中的参数计数相同?我认为这不是必须的,我想得到两条不同但相似的路线 - 例如:

对于类别 - catalog / category1 / 1

对于产品 - 目录/类别1 /产品1(没有页数)

当我将路径catalog_category_product的形式更改为catalog /:categoryIdent / something /:productIdent / so其工作

这是路线呼叫

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

请记住,路由是按相反顺序检查的,因此ZF路由器会在匹配URL时检查catalog_category路由之前的catalog_category_product路由。因此,参数的数量不是问题,但由于您没有对“页面”参数设置任何限制,因此通常与catalog_category_product网址匹配的所有网址都将与{{1}匹配而不是。

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