17

How can I get the current URL from a Twig template?

I am using Twig with PHP, without any other framework.

rink.attendant.6
  • 44,500
  • 61
  • 101
  • 156
nKognito
  • 6,297
  • 17
  • 77
  • 138

5 Answers5

28

The following works in Silex and most certainly in Symfony2 as they share the Request class (I did not test though) :

{{ app.request.getRequestUri() }}
Popnoodles
  • 28,090
  • 2
  • 45
  • 53
neemzy
  • 1,899
  • 23
  • 25
7

Finding the current URL

The current URL is supplied by your web server and written to the $_SERVER super-global. Run this small script, <?php echo '<pre>'; print_r($_SERVER);, through your server and root around to find the value(s) you are looking for.

Related questions on this subject:

The PHP manual describes the nature of the available $_SERVER values here.

Getting the URL in TWIG

After you have the URL, you need to pass it as a template variable when calling render(...) on the Twig template instance. For example, you might code this.

$current_url = // figure out what the current url is

// pass the current URL as a variable to the template
echo $template->render(array('current_url' => $current_url));

To use the variable in the template, you use the {{ variable_name }} syntax.

Community
  • 1
  • 1
erisco
  • 14,154
  • 2
  • 40
  • 45
  • I wonder if there is any internal tool (variable ot method) to get URL from Twig? – nKognito Feb 18 '12 at 07:37
  • You might find some code already written for the purpose, but retrieving the current URL is not within the scope of a template engine, so I highly doubt Twig has anything built in. I certainly couldn't find anything. – erisco Feb 18 '12 at 07:48
4

Go http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Request.html

or : {{ app.request.getUri() }} for full Uri.

Breith
  • 2,160
  • 1
  • 23
  • 32
2

Keeping best practice in mind, at this time you should use Symfony\Component\HttpFoundation\RequestStack.

See http://symfony.com/blog/new-in-symfony-2-4-the-request-stack.

As of Symfony 2.4, the best practice is to never inject the request service, but to inject the request_stack service instead [...]

So in a Silex application it could be achieved with :

app.request_stack.getCurrentRequest.getUri
Alex D
  • 181
  • 1
  • 4
0

Here something I found to make it generic with the sliex Framework. I guess my solution is not perfect but it's get the job done.

in your PHP code add this code :

$app = new Silex\Application();
// add the current url to the app object.
$app['current_url'] = $_SERVER['REQUEST_URI'];

Then in your Twig template you can do

{{ app.current_url }}

Let me know what is the botom line of this method.

Benjamin
  • 25
  • 1