在 Symfony (2.3) 中,路由注释中的等号和冒号有什么区别吗?
In Symfony (2.3) is there any difference between equals and colon in route annotations?
文档中使用了 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+"
* }
* )
*/
http://symfony.com/doc/2.3/bundles/SensioFrameworkExtraBundle/annotations/routing.html
* @Route("/{id}", requirements={"id" = "\d+"}, defaults={"id" = 1})
据我所知,您最终使用的语法没有区别。注释 reader 接受两者作为有效的 key => value 语法。
我做了一些调试,看看如果你通过这两种语法,是否会有任何不同。
一个简单的控制器(带有您提供的注释):
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();
}
}
如您所见,我在 _locale 和“: 中使用了“=” ]" for _format.
然后我转储了所有传递给 AnnotationLoader 的路由集合。如果您有兴趣,可以自己查找并进行一些转储。加载器的命名空间是 Symfony\Component\Routing\Loader\AnnotationClassLoader 并且可以在 vendor symfony/symfony.
中找到
大部分魔法发生在方法 addRoute() 中,它接受很少的参数,其中之一是 Sensio\Bundle\FrameworkExtraBundle\Configuration\Route[=46= 的实例], 保存你解析的路线及其所有选项。转储变量 $requirements 我们可以看到带有 requirements 的格式化数组:
array (size=3)
'_locale' => string 'en|fr' (length=5)
'_format' => string 'html|rss' (length=8)
'year' => string '\d+' (length=3)
所以,总结一下 - 不,我相信您将使用哪种语法没有太大区别。
- 编辑 -
提示:如果您也尝试进行一些调试,请不要忘记清除缓存(环境无关紧要),否则您将看不到结果。
文档中使用了 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+"
* }
* )
*/
http://symfony.com/doc/2.3/bundles/SensioFrameworkExtraBundle/annotations/routing.html
* @Route("/{id}", requirements={"id" = "\d+"}, defaults={"id" = 1})
据我所知,您最终使用的语法没有区别。注释 reader 接受两者作为有效的 key => value 语法。
我做了一些调试,看看如果你通过这两种语法,是否会有任何不同。
一个简单的控制器(带有您提供的注释):
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();
}
}
如您所见,我在 _locale 和“: 中使用了“=” ]" for _format.
然后我转储了所有传递给 AnnotationLoader 的路由集合。如果您有兴趣,可以自己查找并进行一些转储。加载器的命名空间是 Symfony\Component\Routing\Loader\AnnotationClassLoader 并且可以在 vendor symfony/symfony.
中找到大部分魔法发生在方法 addRoute() 中,它接受很少的参数,其中之一是 Sensio\Bundle\FrameworkExtraBundle\Configuration\Route[=46= 的实例], 保存你解析的路线及其所有选项。转储变量 $requirements 我们可以看到带有 requirements 的格式化数组:
array (size=3)
'_locale' => string 'en|fr' (length=5)
'_format' => string 'html|rss' (length=8)
'year' => string '\d+' (length=3)
所以,总结一下 - 不,我相信您将使用哪种语法没有太大区别。
- 编辑 -
提示:如果您也尝试进行一些调试,请不要忘记清除缓存(环境无关紧要),否则您将看不到结果。