2015-04-15 55 views
1

在文檔中使用了2種語法。用':'或'='分隔這些值。有什麼區別嗎?在Symfony(2.3)中,路由註釋中的equals和冒號有什麼區別嗎?

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}) 

回答

4

據我所知,沒有任何區別哪個語法,你最終使用。註釋閱讀器同時接受有效的 =>語法。

我做了一些調試,看看是否會有任何區別,如果你通過兩種語法。

一個簡單的控制器(與您提供的註釋):

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公司\包\ FrameworkExtraBundle \配置\實例路線,牽着你的解析得到的路由與所有的選項。轉儲變量$要求我們可以看到格式化的陣列要求:

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

所以,把它包起來 - 不,我相信沒有太多哪些語法,你將使用的差別。

- 編輯 -

提示:如果你嘗試做一些調試爲好,做忘記清除緩存(環境沒有關係),否則你不會看到的結果。

+0

是的,這符合我們的經驗。 – Interlated

相關問題