2012-09-11 18 views
1

超过一次长谈解释说,错误,下面是解释一切的截图:URL包含“E”,它不再配衬请求路由

当我们进入一个“e”内对应于rss_category的URL,它不再匹配的路由。参见: ! enter image description here

我们通过强制要求{slugCat}接受任何.^解决了这个(他们之前没有任何要求)

如果能帮助别人somday,如果任何人有一个合理的解释,我会很高兴听到(在Symfony 2.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这样做,因为通常你都会有某种隔膜的变量名之前,如/上传/ rssArticle/{} slugCat,路由其中“/”将是分隔符,它试图让你使用这个分隔符来分隔包含多个变量的路由中的变量。在你的情况下,变量前的字符是'e',该字符变成分隔符,这就是你的路由不匹配的原因。如果你的路线是beed/upload/rssArticles {slugCat},那么's'就是分隔符,那就是你无法使用的字符。

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

+1

我自己添加了这个问题:https://github.com/symfony/symfony/issues/5492 –

+1

原来已经有这个问题的拉取请求:https://github.com/symfony/symfony/pull/5469 –