1

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

一旦我们在对应的 url 中输入一个“e” rss_category它就不再匹配路由。看 : !在此处输入图像描述

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

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

4

1 回答 1

3

哇,好难的。这是因为在编译路由时,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 路由器组件上创建一个问题。我认为如果前面的字符是字母或数字,则不应将其用作分隔符。

于 2012-09-11T15:19:26.193 回答