Php Zend Regex路由器不匹配任何内容

Php Zend Regex路由器不匹配任何内容,php,regex,zend-framework,routing,Php,Regex,Zend Framework,Routing,我目前有一个Zend Framework路由定义如下: $route = new Zend_Controller_Router_Route('brand/:brand_name/series/:page', array('controller' => 'brand', 'action' =&g

我目前有一个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);
我正在尝试调整此路由,以便page参数只捕获数字,这样我就可以添加另一个路由,在相同的位置使用单词,而不会出现两个冲突,例如:

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/johnycupcakes/series/2
,告诉我
操作“johnycupcakes”不存在,并且没有被困在调用()中。在堆栈跟踪中,我看到:

'controller' => 'brand',
'action' => 'johnnycupcakes',
'series' => '2',
'module' => 'default'
事实上,即使我让route和default参数与第一个示例中的完全相同,并简单地将类更改为Router_route_Regex,我也会得到相同的错误

我知道这个错误不是路由冲突,因为我没有添加可能发生冲突的路由。另外,它似乎正在尝试与标准路线匹配。我在版本1.11上测试这个,所以我的版本应该与示例中的代码完全兼容

据我所知,正则表达式的路径根本不匹配,尽管它非常适合。为什么这可能会失败

编辑:
我第一次从问题中漏掉了addRoute。我总是在代码中包含它,这不是问题所在。

您需要的是通过向Zend\u Controller\u Router\u Route\u 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
,它仍然可以工作。在ZF手册中查看更多信息,我已经尝试过了,但没有任何区别。命名参数的目的是使它们更易于使用,但如果路线根本不匹配,则没有区别。堆栈跟踪的映射显示路由甚至没有匹配,它正在尝试将标准路由应用于我的url。@jaimerump您是否确实将路由连接到路由器?是的,下一行是addRoute。我将编辑该问题以显示我已将其包括在内。