【问题标题】:Zend Regex Router does not match anythingZend Regex 路由器不匹配任何内容
【发布时间】:2013-09-18 05:04:26
【问题描述】:

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

【问题讨论】:

    标签: php regex zend-framework routing


    【解决方案1】:

    您需要通过将第三个参数添加到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上查看更多采埃孚手册

    【讨论】:

    • 我试过了,没区别。命名参数的目的是使它们更易于使用,但如果路由根本不匹配,则没有区别。来自堆栈跟踪的映射显示该路由甚至没有被匹配,它正在尝试将标准路由应用于我的 url。
    • @jaimerump 你真的把路由连接到路由器了吗?
    • 是的,下一行是 addRoute。我将编辑问题以表明我已将其包含在内。
    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多