2014-06-09 44 views
0

/en(?=/)demo/正則表達式模式必須與/en/demo/ URI匹配,但它在Symfony路由中不起作用。爲什麼不在Symfony路由中使用正則表達式積極lookahead?

路線的完整示例代碼:

demo: 
    pattern: /{_locale}demo/ 
    defaults: { _controller: BWMainBundle:Demo:index } 
    requirements: 
     _locale: 'en(?=/)' 

爲什麼不Symfony的2工作正則表達式正預測先行?

+1

雖然這與您的問題無關,但我建議您嘗試[JMSI18nRoutingBundle](http://jmsyst.com/bundles/JMSI18nRoutingBundle),它非常適合根據所選區域設置正確的路線。 – VisioN

+0

@VisioN感謝您的諮詢!我試着學習它捆綁,也許它會對我有幫助。 –

回答

3

Symfony不允許在要求中尋找代碼:https://github.com/symfony/symfony/issues/10548原因是隻有「{_locale}」的部分與正則表達式匹配,而不是與正則表達式相匹配。

我也想知道你爲什麼要這樣嗎?如果你想要一個可選的語言環境參數,你應該創建2個路由,並綁定到同一個控制器:

demo_multilang: 
    pattern: /{_locale}/demo/ 
    defaults: { _controller: BWMainBundle:Demo:index } 
    requirements: 
     _locale: 'en' 

demo: 
    pattern: /demo/ 
    defaults: { _controller: BWMainBundle:Demo:index, _locale: en } 
    requirements: 
     _locale: 'en' 

https://github.com/symfony/symfony/issues/5424終於付諸實施。這將得到解決。

+0

它不會匹配默認'_locale'的'// demo /'嗎? – VisioN

+0

@VisioN嗯,它似乎不匹配任何東西。所以你必須創建2個路由並將它們綁定到同一個控制器。編輯我的帖子。謝謝! –

+0

謝謝!這是一個很好的解決方案,但我想在沒有第二條路線的情況下也這樣做。問題是,我需要每個路線重複有和沒有區域設置。現在我有近50條路線,所以當我將它們複製到100時:( –

相關問題