【问题标题】:Zend Url View Helper not working with Regex RoutesZend Url View Helper 不使用正则表达式路由
【发布时间】:2012-12-17 17:01:30
【问题描述】:

我正在使用 Zend Framework 1.12 并且有这条路线:

$router->addRoute('item_start',
    new Zend_Controller_Router_Route_Regex(
            '(foo|bar|baz)',
            array(
                'module'        => 'default',
                'controller'    => 'item',
                'action'        => 'start'
            ),
            array(
                1 => 'area'
            ),
            '%s'
        )
);

问题是,当我调用 '/foo' 并在视图中使用 Url Helper 时,它没有给我任何参数:

$this->url(array("page"=>1));
// returns '/foo' (expected '/foo/page/1')

$this->url(array("page"=>1), "item_start", true);
// also returns '/foo'

知道如何将页面参数放入 URL 中吗?我不能像在标准路由中那样使用通配符,不是吗?

【问题讨论】:

    标签: php zend-framework zend-route


    【解决方案1】:

    除了大卫的建议,你可以改变这个路由使用标准路由类,然后保留通配符选项:

    $router->addRoute('item_start',
        new Zend_Controller_Router_Route(
                ':area/*',
                array(
                    'module'        => 'default',
                    'controller'    => 'item',
                    'action'        => 'start'
                ),
                array(
                    'area' => '(foo|bar|baz)' 
                )
            )
    );
    
    // in your view:
    echo $this->url(array('area' => 'foo', 'page' => 1), 'item_start');
    

    【讨论】:

    • 啊,完全忘记了第三个参数,用于限制值。我会选择你的解决方案,看起来更灵活,谢谢!
    【解决方案2】:

    您的 Regex 路由没有 page 参数,因此当 url view-helper 最终使用您提供的参数调用 Route::assemble() 时,它会忽略您的 page 值。

    想到的两个选择是:

    1. 修改您的正则表达式以包含一个(可能是默认值可选)page 参数
    2. 在查询字符串中管理路由之外的page 参数。

    【讨论】:

    • 谢谢,1. 当我需要更多参数时可能会变得相当复杂,但是 2. 是一个很好的解决方法,但需要一个新的 Url Helper。在我的情况下,蒂姆的解决方案似乎是最好的。 :)(对不起,我只能设置一个答案为“正确答案”。)
    • 没有汗水,很高兴我们都能提供帮助。干杯。 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2016-10-10
    相关资源
    最近更新 更多