在 Symfony (2.3) 中,路由注释中的等号和冒号之间有什么区别吗?

Int*_*ted 2 php routes symfony

文档中使用了 2 种语法。用“:”或“=”分隔值。有什么区别吗?

http://symfony.com/doc/2.3/book/routing.html

/**
 * @Route(
 *     "/articles/{_locale}/{year}/{title}.{_format}",
 *     defaults={"_format": "html"},
 *     requirements={
 *         "_locale": "en|fr",
 *         "_format": "html|rss",
 *         "year": "\d+"
 *     }
 * )
 */
Run Code Online (Sandbox Code Playgroud)

http://symfony.com/doc/2.3/bundles/SensioFrameworkExtraBundle/annotations/routing.html

 * @Route("/{id}", requirements={"id" = "\d+"}, defaults={"id" = 1})
Run Code Online (Sandbox Code Playgroud)

Art*_*iel 5

据我所知,您最终使用哪种语法没有区别。注释阅读器接受两者作为有效的=>语法。

我做了一些调试,看看如果你同时传递这两种语法,是否会有什么不同。

一个简单的控制器(带有您提供的注释):

class TestController extends Controller {

    /**
    * @Route(
    *     "/articles/{_locale}/{year}/{title}.{_format}",
    *     defaults={"_format": "html"},
    *     requirements={
    *         "_locale" = "en|fr",
    *         "_format": "html|rss",
    *         "year": "\d+"
    *     }
    * )
    */
    public function testRouteAction() {
        return new Response();
    }

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我使用“ = ”表示_locale和“ ”表示_format

然后我转储了所有传递给 AnnotationLoader 的路由集合。如果你有兴趣,你可以自己找到并做一些转储。加载器的命名空间是Symfony\Component\Routing\Loader\AnnotationClassLoader,可以在供应商symfony/symfony 中找到

大多数魔法发生在方法addRoute() 中,该方法接受很少的参数,其中之一是Sensio\Bundle\FrameworkExtraBundle\Configuration\Route 的实例,保存您解析的路由及其所有选项。转储变量$requirements我们可以看到带有要求的格式化数组:

array (size=3)
  '_locale' => string 'en|fr' (length=5)
  '_format' => string 'html|rss' (length=8)
  'year' => string '\d+' (length=3)
Run Code Online (Sandbox Code Playgroud)

所以,总结一下 - 不,我相信您将使用哪种语法没有太大区别。

- 编辑 -

提示:如果您也尝试进行一些调试,请不要忘记清除缓存(环境无关紧要)否则您将看不到结果。