我有以下路由定義symfony的路由,使用值從請求的默認
my_route:
path: /actual-path/
defaults:
_controller: MyBundle:MyController:detail
id: application_id
requirements:
methods: GET
id: \d+
控制器需要一個叫做$id
參數。
但我不希望在URL中使用的$id
,我想用一個值是在$request->attributes->get('application_id')
可有將注入兩個參數(application_id
和application
)到請求的監聽器對象作爲路由過程之前的屬性,所以這個值就在那裏。 (它也很容易注入到RequestContext
)。
有沒有一種方法可以使用我的路由中的Request
或RequestContext
對象的屬性值作爲默認值?
現在我可以簡單地在我的控制器中執行$request->attributes->get('application_id')
。但是這種控制器將在幾種情況下使用。在其他情況下,$id
將通過url傳遞。我發現在路由器中設置id比在控制器中建立if-else子句更清潔。
Controller :: myAction(Request $ request,$ application_id)會做你想做的。控制器解析器將使用參數名稱自動將數據從請求對象中拉出。你的問題有點混亂。如果這個id不存在於url中,那麼只需讓你的監聽器添加到application_id中。無論如何,我懷疑你的路線定義需要更多的工作。 – Cerad
事情是,我無法更改控制器:action,因爲這是一個通用操作(位於供應商目錄中)。所以控制器期待'id',但Request中的值是'application_id'。所以基本上,我需要在路由配置中進行某種映射。 – DoppyNL
我想你可以用表達式來完成它:http://symfony.com/doc/current/book/routing.html#completely-customized-route-matching-with-conditions。否則,添加另一個內核監聽器來執行此操作。 – Cerad