Twig模板引擎:获取当前URL

17

如何从Twig模板获取当前URL?

我正在使用Twig与PHP,没有使用其他框架。


为什么不将当前URL作为模板变量传入?或者你可以编写一个模板标签来输出URL。 - Michael Mior
5个回答

28

以下代码在 Silex 中运行良好,并且在 Symfony2 中也肯定可行(尽管我没有测试):

{{ app.request.getRequestUri() }}

6
{{ app.request.requestUri }} - eightyfive
1
它已被弃用,不应再使用。https://github.com/silexphp/Silex/issues/1257#issuecomment-141058724 - Tieme

7

获取当前URL

当前URL由您的Web服务器提供,并写入$_SERVER超全局变量中。通过您的服务器运行这个小脚本,<?php echo '<pre>'; print_r($_SERVER);,并查找您要查找的值。

有关该主题的相关问题:

PHP手册在此处描述了可用$_SERVER值的性质

在TWIG中获取URL

在获取URL之后,您需要在调用Twig模板实例的render(...)时将其作为模板变量传递。例如,您可能会编写以下代码。

$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));

在模板中使用变量,您可以使用{{ 变量名 }}的语法。


我想知道是否有任何内部工具(变量或方法)可以从Twig获取URL? - nKognito
你可能会发现已经有一些为此编写的代码,但是检索当前URL不在模板引擎的范围内,因此我非常怀疑Twig中是否有任何内置内容。我肯定找不到任何东西。 - erisco

4

2
保持最佳实践,此时您应该使用 Symfony\Component\HttpFoundation\RequestStack
请参见 http://symfony.com/blog/new-in-symfony-2-4-the-request-stack
自 Symfony 2.4 起,最佳实践是永远不要注入请求服务,而是注入请求堆栈服务[...]。
因此,在 Silex 应用程序中可以通过以下方式实现:
app.request_stack.getCurrentRequest.getUri

0

这里有一些我找到的东西,可以使用sliex框架使其通用化。 我猜我的解决方案并不完美,但它能完成工作。

在你的PHP代码中添加以下代码:

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

然后在你的Twig模板中可以这样做

{{ app.current_url }}

请告诉我这个方法的底线是什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接