我目前有一个 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 文档中的示例进行操作。第一步是将路线更改为如下所示:
$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 。我一直在代码中,这不是问题。