簡體   English   中英

在Symfony 2中通過路由設置默認語言環境

[英]Set default locale with routing in Symfony 2

我在routing.yml配置我的主要路線,如下所示:

geekhub_main:
resource: "@GeekhubMainBundle/Resources/config/routing.yml"
prefix:   /{_locale}
defaults: { _locale: en }
requirements:
    _locale: en|uk

如此處所述, Symfony2 docs ,但是當我去做一些沒有語言環境的頁面時,例如example.com/posts而不是example.com/en/posts我得到一個錯誤,提示No route found for ...

所以我做錯了什么?

這里有一個相關的文章stackoverflow ,但是我想defaults方法比_locale: |en|uk

如您在文檔中所讀:

當然,您可以有多個可選的占位符(例如/ blog / {slug} / {page}),但是可選的占位符之后的所有內容都必須是可選的。 例如,/ {page} / blog是有效路徑,但是始終需要page(即,簡單地/ blog將不匹配此路由)。

如果您以_locale作為前綴,則路由器將要求您始終添加它(即使您添加了默認值)。

如果使用前綴而不是前綴,則路由如下所示:

_test:
    path: /test/{_locale}
    defaults: { _controller: AcmeDemoBundle:Demo:contact, _locale: en }
    requirements:
        _locale: en|uk

/test將起作用, /test/en將起作用。

因此,我認為使用前綴,更好,更優雅的方法是定義多個模式:

_test:
  path:   /test
  defaults: { _controller: AcmeDemoBundle:Demo:contact, _locale: en }

_test_:
  path:   /{_locale}/test
  defaults:  { _controller: AcmeDemoBundle:Demo:contact}
  requirements:
      _locale:  en|uk

test也可以/en/test工作。

解決方案:

requirements:
   _locale:  |en|uk

由於//test是有效的網址,因此不是一個好選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM