Symfony2路由:换行问题

时间:2011-09-20 06:23:42

标签: routing symfony

我有一个路由模式,其中最后一个参数是从多行输入字段填充的。当我在没有换行符的情况下调用路由时,一切正常,但是当我有一个换行符(它被转义为%0A)时出现错误:

No route found for "GET /update/1/complete/Kommentar%3Daa%0Abb%7C&quot

路由定义:

_update:
    pattern:   /update/{id}/{column}/{newvalue}
    defaults: { _controller: MyBundle:Auftrag:update, newvalue: ' ' }    
    requirements:
        id:  \d+   
        newvalue: ".+"

我的控制器定义是:

public function updateAction($id, $column, $newvalue) {
}

2 个答案:

答案 0 :(得分:1)

您应该知道,根据REST的想法,您不会通过GET启动更改。如需更新,您可以使用POST作为示例,然后解决换行问题。

我还获得了urlencoded字符将被解释的经验。例如,urlencoded斜杠被解释为路径分隔符。不知道为什么,我想这是由于一天结束时的服务器设置。所以解决方案就在那里。

如果您坚持使用自己的方式,可以用“,”,“ - ”,“_”组合替换问题字符。但那只是一个黑客。使用POST代替传输的数据。

答案 1 :(得分:1)

这似乎是Symfony路由编译器中的一个错误。 我在github Symfony存储库上打开了一个pull request,让我们看看它是否被接受了......同时,你可以通过修改Component / Routing / RouteCompiler.php来解决这个问题:

sprintf("#^\n%s$#x", $regex), // line 99

变为

sprintf("#^\n%s$#xm", $regex),
------------------^

希望它有所帮助。 阿尔贝托