【问题标题】:Symfony2 routing: problem with line breaksSymfony2路由:换行问题
【发布时间】:2011-11-20 19:27:38
【问题描述】:

我有一个路由模式,其中最后一个参数是从多行输入字段中填充的。当我在没有换行的情况下调用路由时,一切正常,但是当我有换行时出现错误(转义为 %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) {
}

【问题讨论】:

    标签: routing symfony


    【解决方案1】:

    您应该知道,根据 REST 理念,您不会通过 GET 发起更改。例如,对于更新,您可以使用 POST,然后您的换行问题就解决了。

    我还体验到 urlencoded 字符会被解释。例如,urlencoded 斜杠被解释为路径分隔符。不知道为什么,我猜这是由于一天结束时的服务器设置。所以解决方案就在某个地方。

    如果你坚持使用你的方式,你可以用“,”,“-”,“_”的组合替换问题字符。但这只是一个技巧。使用 POST 代替传输的数据。

    【讨论】:

    • 虽然这是一个公认的答案,但是否有原始问题的解决方案。如果路径中有换行符怎么办?
    【解决方案2】:

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

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

    变成

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

    希望对您有所帮助。 阿尔贝托

    【讨论】:

    • 我必须纠正自己——更好:symfony github 上的 Jordi 纠正了我。 :-) 不要添加“m”,而是添加“s”(PCRE_DOTALL 修饰符)
    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2012-07-29
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多