你有"/{staat}/"
,但你的需求設置"location" = ...
,這些應該匹配,所以也許這是你的問題的原因。
如果您不想對路由中的狀態列表進行硬編碼,則可以使用狀態列表注入服務包含器參數。請參閱文檔中的How to use Service Container Parameters in your Routes以瞭解如何執行此操作。
如果你只是要檢查,該州是否是全是小寫字母,你可以嘗試以下要求:
staat: "[a-z-]+"
這應該僅匹配小寫字符和破折號(如「薩克森 - 安哈特」) 。但我不完全確定這是否會工作,因爲路由器的正則表達式檢測有點古怪。
您還可以創建一個custom Router Loader,它將以編程方式創建路線,例如,通過從數據庫或文件中獲取狀態列表。
編輯:
正如我在評論中寫道我想補充則params的列表作爲服務Container參數,例如包含狀態列表的%my_demo.states%
。但我不確定這是否可以用於註釋。所以這裏是一個快速的解決方法,如何讓它工作。
在你app/config/config.yml
你追加%my_demo.states%
參數:
my_demo:
states: ["berlin", "brandenburg", "sachsen-anhalt", ... ]
在你app/config/routing.yml
應該是這樣的:
my_demobundle:
resource: "@MyDemoBundle/Controller/"
prefix: /
type: annotation
的type: annotation
和@MyDemoBundle
是相關的部分。之前添加以下航線這一項,以確保它的優先級:
showStaats:
path: /{state}
defaults: { _controller: MyDemoBundle:State:index }
requirements:
state: %my_demo.states%
這將增加,這將適用於使用狀態的列表作爲參數之前註解的路線。這有點粗糙,因爲您正在混合使用基於yml /註釋的路由,但它仍然比在註釋中填充16個狀態列表更好,更不用說更易於維護。
我有機會成@路線(「/ {location} /」,name =「showStaats」,requirements = {location:「[az - ] +」location「=」berlin | bayern | brandenburg「}),因此它不起作用 – Vico
在你的註釋中再次出現一個小錯誤(你的兩個要求之間缺少一個逗號)。我認爲你不能同時適用這兩個要求,一會覆蓋另一個。您應該使用我鏈接的服務容器參數方法,因爲您有一個固定的狀態列表。我會在我的答案中添加一個示例... – dbrumann