Symfony:包含' /'

时间:2014-06-18 11:54:01

标签: php symfony

我遇到了问题。

这是我目前的路线:

edit_declaration:
    pattern:    /X/Y/{idDeclaration}/{token}/{modification}
    defaults:   { _controller: SgaDemandeBundle:Demande:editDone}
    requirements:
        token:  .+

然后:

http://website/X/Y/myIdDeclaration/A4Z5TvCgPoBW+iP6BO0NsVW2ya0J9ME/gIeiJ+q0lGw=/OK

我的令牌可以有'/'

我的令牌是:A4Z5TvCgPoBW+iP6BO0NsVW2ya0J9ME/gIeiJ+q0lGw=

但我的令牌在'/'后被切断了:

A4Z5TvCgPoBW+iP6BO0NsVW2ya0J9ME/ 

而不是

A4Z5TvCgPoBW+iP6BO0NsVW2ya0J9ME/gIeiJ+q0lGw=

我按照这个例子:http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html

看起来这是在不使用其他背后的工作。

请帮助

2 个答案:

答案 0 :(得分:3)

你误解了doc中的例子。该示例允许您通过斜杠分隔2个不同的参数。

您必须使用urlencode将斜杠和其他字符编码为安全解释。

默认参数是在Symfony2中编码的url,你如何生成路由?

编辑:   在评论中,您说您正在使用<a href='{{path}}/{{declaration.idDeclaration}}/{{ token|url_encode() }}'>  请使用symfony的路由生成系统:

<a href='{{ path('nameOfThePath', {'id': declaration.idDeclaration, 'token': token }}'>

这样,如果有一天您想要更改路线,则无需传递所有页面......

答案 1 :(得分:1)

生成令牌时使用urlencode。因此/变为%2F