我有以下路由定义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