我有一个路由模式,其中最后一个参数是从多行输入字段填充的。当我在没有换行符的情况下调用路由时,一切正常,但是当我有一个换行符(它被转义为%0A)时出现错误:
No route found for "GET /update/1/complete/Kommentar%3Daa%0Abb%7C"
路由定义:
_update:
pattern: /update/{id}/{column}/{newvalue}
defaults: { _controller: MyBundle:Auftrag:update, newvalue: ' ' }
requirements:
id: \d+
newvalue: ".+"
我的控制器定义是:
public function updateAction($id, $column, $newvalue) {
}
答案 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),
------------------^
希望它有所帮助。 阿尔贝托