我不知道自己做错了什么。我有两个名为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);
感谢您的帮助
答案 0 :(得分:1)
请记住,路由是按相反顺序检查的,因此ZF路由器会在匹配URL时检查catalog_category
路由之前的catalog_category_product
路由。因此,参数的数量不是问题,但由于您没有对“页面”参数设置任何限制,因此通常与catalog_category_product
网址匹配的所有网址都将与{{1}匹配而不是。
听起来“页面”应该是数字,因此将该限制添加到第二条路线应该可以解决问题。