【问题标题】:When the url contains "e" it no longer matchs the requested route当 url 包含“e”时,它不再匹配请求的路由
【发布时间】:2012-09-04 12:09:48
【问题描述】:

不止是解释这个错误的长篇大论,这里有一个解释一切的屏幕截图:

只要我们在对应rss_category的url中输入一个“e”它就不再匹配路由了。看 : !

我们通过强制要求 {slugCat} 接受任何 .^ 来解决此问题(以前没有要求)

如果那一天可以帮助某人,并且如果有人有有效的解释,我会很高兴听到(在 Symfony 2.1.1 下运行)。

【问题讨论】:

    标签: symfony routing symfony-2.1


    【解决方案1】:

    哇,好难。这是因为在编译路由时,symfony 试图使用变量名前面的字符作为分隔符。此代码来自 RouteCompiler.php:

                // Use the character preceding the variable as a separator
                $separators = array($match[0][0][0]);
    
                if ($pos !== $len) {
                    // Use the character following the variable as the separator when available
                    $separators[] = $pattern[$pos];
                }
                $regexp = sprintf('[^%s]+', preg_quote(implode('', array_unique($separators)), self::REGEX_DELIMITER));
    

    Symfony 这样做是因为通常你会在变量名之前有某种分隔符,像 /upload/rssArticle/{slugCat} 这样的路由,其中​​ '/' 将是分隔符,它试图通过让你提供帮助使用此分隔符分隔包含多个变量的路由中的变量。在您的情况下,变量之前的字符是“e”并且该字符成为分隔符,这就是您的路线不匹配的原因。如果您的路线是 /upload/rssArticles{slugCat},那么“s”将是分隔符,这将是您无法使用的字符。

    也许你可以在 symfony 路由器组件上创建一个问题。我认为如果前面的字符是字母或数字,则不应将其用作分隔符。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2013-07-02
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多