我有一个带可选参数的路由:
/**
* @Route( "/route/{id}", name="_route", defaults={"id" = ""} )
* @Template()
*/
在模板中我有一个表单,我希望将表单发送到:
/route
或:
/route/10
/route/10/mail – if there were more than just one parameter
目前我正在解决这个问题:
{{ path(app.request.attributes.get('_route')) }}/{{ object.id }}
哪个工作正常,但我必须自己添加所有可能的参数。有没有办法从树枝内获得完整的当前路径?我不想在我的控制器中添加额外的变量来发送到模板。
答案 0 :(得分:17)
Request
类有getRequestUri()
方法。您可以在像
{{ app.request.requesturi }}
答案 1 :(得分:6)
还有一种方法(不确定这是否是一种好的做法):
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
在这种情况下,您可以为其添加一个附加参数:
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge({'p': 10})) }}
答案 2 :(得分:0)
是不同的行动。具有不同模板的不同操作。使用树枝,您可以拥有2个或3个模板,这些模板可以扩展第三个模板。在第三个中,您可以定义列表的集合。还有一大块的形式。在twig中,您可以扩展模板。
我仍然,...认为你需要不同的模板和不同的动作。每个动作的模板都会使用列表扩展“超级”模板。
答案 3 :(得分:-1)
您可以在操作中使用多个@Route:
/**
* @Route( "/route/{id}", name="_route" )
* @Route( "/route/{id}/hello", name="_route_hello" )
* @Route( "/route/{id}/hello/{world}", name="_route_hello_world" )
* @Template()
*/
检查变量是否存在......
但是......我不明白你需要在不同的路线上使用相同的动作。我更喜欢为每个“目的”使用一个动作。并且为了遵循DRY模式,我喜欢写一些不重写代码的私有方法......