Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get current route in Symfony 3.3 and Twig

Tags:

twig

symfony

I would like to have the current route in Symfony 3 in a Twig view.

I already did some research, but I didn't find any solution. I try the following in my Twig view:

{{ app.request.uri }}

It returns something like: http://localhost:8000/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DFOSUserBundle%253ASecurity%253Alogin

{{ app.request.get('_route') }}

Always returns NULL.

{{ app.request.getpathinfo }}

Always have: /_fragment

What I need is very simple. For an URL like localhost:8000/article/5, I would like to retrieve /article/5.How to do this?

like image 992
Raphael Avatar asked Sep 24 '17 15:09

Raphael


1 Answers

The following code snippet will do the trick:

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}

app.request.attributes.get('_route') - returns current route name.

app.request.attributes.get('_route_params') - returns current route params.

path() - generates route path by route name and params.

This approach will not work for forwarded requests. In case of forward request, there is a workaround: you should pass "_route" and "_route_params" to a forwarded params list.

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

Also you can use app.request to access any Request object functions, such as getPathInfo(), which should return current route path.

{{ app.request.pathInfo }}
like image 175
Mikhail Prosalov Avatar answered Nov 20 '22 02:11

Mikhail Prosalov