我目前有一个Zend Framework路由定义如下:
$route = new Zend_Controller_Router_Route('brand/:brand_name/series/:page',
array('controller' => 'brand',
'action' => 'series',
'page'=>'1'));
$router->addRoute('Brand Series', $route);
我正在尝试调整此路由,以便页面参数仅捕获数字,这样我就可以添加另一条路径,在同一个地方使用单词而不会发生两个冲突,例如:
brand/:brand_name/series/:series_name/:page
我想我会继续阅读ZF文档here中的示例。第一步是将路线改为:
$route = new Zend_Controller_Router_Route_Regex('brand/:brand_name/series/(\d+)',
array('controller' => 'brand',
'action' => 'series'));
然而,这个小小的改变导致之前完全匹配的路线,如/brand/johnnycupcakes/series/2
失败,告诉我Action "johnnycupcakes" does not exist and was not trapped in __call()
。在堆栈跟踪中,我看到:
'controller' => 'brand',
'action' => 'johnnycupcakes',
'series' => '2',
'module' => 'default'
实际上,即使我将路由和默认参数与第一个示例完全相同,只需将类更改为Router_Route_Regex,我也会得到相同的错误。
我知道错误不是路由冲突,因为我没有添加会发生冲突的路由。此外,它似乎正在尝试匹配标准路线。我在版本1.11上测试它,所以我的版本应该与示例中的代码完全兼容。
据我所知,正则表达式路线根本不匹配,尽管它非常明显。为什么这可能会失败?
编辑: 我第一次从问题中省略了addRoute。我总是在代码中使用它,这不是问题。
答案 0 :(得分:0)
您需要的是通过向Zend_Controller_Router_Route_Regex
添加第三个参数来命名捕获的数字参数:
$route = new Zend_Controller_Router_Route_Regex(
'brand/:brand_name/series/(\d+)',
array(
'controller' => 'brand',
'action' => 'series'
),
array(
1 => 'series', // name the parameter captured by (\d+)
)
);
第二个数组可能具有相反关系'series' => 1
的键和值,它仍然有效。在regex routes