Symfony2 + Twig获得真实/全电流路线

时间:2012-06-21 11:35:12

标签: symfony twig routes

我有一个带可选参数的路由:

/**
  * @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 }}

哪个工作正常,但我必须自己添加所有可能的参数。有没有办法从树枝内获得完整的当前路径?我不想在我的控制器中添加额外的变量来发送到模板。

4 个答案:

答案 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模式,我喜欢写一些不重写代码的私有方法......