Get current URL in Twig template?
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
If you want to read it into a view variable:
{% set currentPath = path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) %}
The app
global view variable contains all sorts of useful shortcuts, such as app.session
and app.security.token.user
, that reference the services you might use in a controller.
In symfony 2.1 you can use this:
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
In symfony 2.0, one solution is to write a twig extension for this
public function getFunctions(){ return array( 'my_router_params' => new \Twig_Function_Method($this, 'routerParams'), );}/** * Emulating the symfony 2.1.x $request->attributes->get('_route_params') feature. * Code based on PagerfantaBundle's twig extension. */public function routerParams(){ $router = $this->container->get('router'); $request = $this->container->get('request'); $routeName = $request->attributes->get('_route'); $routeParams = $request->query->all(); foreach ($router->getRouteCollection()->get($routeName)->compile()->getVariables() as $variable) { $routeParams[$variable] = $request->attributes->get($variable); } return $routeParams;}
And use like this
{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}
You won't need all this unless you want to add additional parameters to your links, like in a pager, or you want to change one of the parameters.