4

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

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

4 回答 4

17

该类Request有一个getRequestUri()方法。您可以在树枝中访问它,例如

{{ app.request.requesturi }}
于 2012-06-21T17:00:45.787 回答
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})) }}
于 2013-05-22T09:44:23.303 回答
0

是不同的动作。具有不同模板的不同操作。使用 twig,您可以拥有 2 或 3 个扩展第三个模板的模板。在第三个中,您可以定义列表的块。还有一大堆形式。在树枝中,您可以扩展模板。

我仍然……认为您需要不同的模板和不同的操作。每个动作的模板,都扩展了一个带有列表的“超级”模板。

于 2012-06-21T17:30:15.247 回答
-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 模式,我喜欢编写一些不重写代码的私有方法......

于 2012-06-21T12:02:49.123 回答