在Zend Framework 2路线中编码的参数

时间:2013-02-07 21:33:11

标签: php zend-framework2

我在设置ZF2项目的路径参数时遇到问题。我希望能够将URL作为参数传递给页面,但每次尝试都会产生404.

我创建了一个URL模块,并希望对其进行设置,以便以下控制器将URL作为id参数传递。控制器扩展了AbstractRestfulController类,因此下面的示例将使用get($ id)方法。

控制器地址:

http://localhost/url/

使用参数:

http://localhost/url/http://www.google.co.uk

我的module.config.php的路由器部分如下所示:

'router' => array(
    'routes' => array(
        'url' => array(
            'type' => 'segment',
            'options' => array(
                'route' => '/url[/][:id]',
                'defaults' => array(
                    'controller' => 'URL\Controller\URL',
                ),
            ),
        ),
    ),
),

如果我必须传递编码参数,那么它不会是世界末日,虽然我不愿意。

使用param编码:

http://localhost/url/http:%2F%2Fwww.google.co.uk

1 个答案:

答案 0 :(得分:2)

这并不是直接引用你的问题,但我建议你稍微改善你的路线!目前你的路线太多了,即使是这样:

http://localhost/url1

我不认为你想用这个,这是我的建议:

'type'    => 'segment',
'options' => array(
    'route'    => '/url[/[:id]]',
    'defaults' => array(
        'controller' => 'URL\Controller\URL',
    ),
    'constraints' => array(
        'id' => '<InsertURLRegexHere>'
    )
)

与您的问题更相关:ViewHelpers会自动对重要字符进行urlencode,如Zend\Mvc\Router\Http\Segment中所示,encode()内使用buildPath()

您的行为究竟发生在哪里,并且您确定不仅仅是为了查看目的而对网址进行解码的浏览器? Chrome喜欢做这件事^^