0

我目前有一个 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 。我一直在代码中,这不是问题。

4

1 回答 1

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,它仍然可以工作。在 ZF 手册中查看更多关于正则表达式路线的信息

于 2013-09-17T20:50:59.200 回答