Twig templates engine: get current url

2019-03-24 01:24发布

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

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

标签: php twig
5条回答
做个烂人
2楼-- · 2019-03-24 01:30

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

{{ app.request.getRequestUri() }}
查看更多
在下西门庆
3楼-- · 2019-03-24 01:34

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
查看更多
女痞
4楼-- · 2019-03-24 01:45

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.

查看更多
走好不送
5楼-- · 2019-03-24 01:51
Animai°情兽
6楼-- · 2019-03-24 01:56

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.

查看更多
登录 后发表回答