在Symfony(2.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})

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

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

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

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使用">=",对_format用">"。

然后我丢弃了所有传递给AnnotationLoader的路由集合。如果你感兴趣的话,你可以自己找一些垃圾堆。加载程序的命名空间为Symfony\Component\Routing\loader\AnnotationClassLoader,可以在供应商Symfony/Symfony中找到。

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

array (size=3)
'_locale' => string 'en|fr' (length=5)
'_format' => string 'html|rss' (length=8)
'year' => string 'd+' (length=3)

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

-编辑-

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

最新更新