在 Symfony 3.3 和 Twig 中获取当前路线

Rap*_*ael 7 symfony twig

我想在 Twig 视图中查看 Symfony 3 中的当前路线。

我已经做了一些研究,但我没有找到任何解决方案。我在 Twig 视图中尝试以下操作:

{{ app.request.uri }}
Run Code Online (Sandbox Code Playgroud)

它返回如下内容: http://localhost:8000/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DFOSUserBundle%253ASecurity%253Alogin

{{ app.request.get('_route') }}
Run Code Online (Sandbox Code Playgroud)

总是返回 NULL。

{{ app.request.getpathinfo }}
Run Code Online (Sandbox Code Playgroud)

一直有: /_fragment

我需要的很简单。对于像 的 URL localhost:8000/article/5,我想检索/article/5.How to do this?

Mik*_*lov 11

以下代码片段可以解决问题:

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
Run Code Online (Sandbox Code Playgroud)

app.request.attributes.get('_route') - 返回当前路线名称。

app.request.attributes.get('_route_params') - 返回当前路线参数。

path() - 通过路由名称和参数生成路由路径。

这种方法不适用于转发的请求。在转发请求的情况下,有一个解决方法:您应该将“_route”和“_route_params”传递给转发的参数列表。

return $this->forward('Yourbundle:Controller:action', array(
    //... your parameters...,
    '_route' => $this->getRequest()->attributes->get('_route'),
    '_route_params' => $this->getRequest()->attributes->get('_route_params');
));
Run Code Online (Sandbox Code Playgroud)

您还可以使用app.request访问任何请求对象函数,例如 getPathInfo(),它应该返回当前路由路径。

{{ app.request.pathInfo }}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但我读了几个消息来源说`app.request.get('_route')` 仅用于调试目的,而且速度可能很慢。它与`app.request.attributes.get('_route')` 是一回事吗?这个问题今天仍然适用吗? (2认同)