How can I get the current URL from a Twig template?
I am using Twig with PHP, without any other framework.
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.
Go http://api.symfony.com/2.3/Symfony/Component/HttpFoundation/Request.html
or : {{ app.request.getUri() }}
for full Uri.
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
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.