我在查找Twig模板中获取当前路径的代码(而不是完整的URL),即我不需要http://www.sitename.com/page
,我只需要/page
。
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
如果你想将其读入一个视图变量:
{% set currentPath = path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) %}
app
全局视图变量包含各种有用的快捷方式,例如 app.session
和 app.security.token.user
,它们引用你在控制器中可能使用的服务。
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
- Robinapp.request.get('_route')
(.attributes是可选的)。在symfony 3.2.6中测试过,旧版本不确定。 - robbe clerckx获取当前URL:{{ app.request.uri }}
在Symfony 2.3, 3, 4, 5中
仅获取路径:{{ app.request.pathinfo }}
(不带参数)
获取请求URI:{{ app.request.requesturi }}
(带参数)
{{ app.request.pathinfo }}
,或查看/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
中可用方法的列表。 - Michaeluri
获取带参数的 URL。pathinfo
获取不带参数的路径。requestUri
获取带参数的路径。在我看来,应该将 requestUri
添加到这个答案中。你很少需要域名,也很少想要删除参数。 - rybo111config/packages/framework.yaml
(Symfony 5.2+)中正确设置trusted_{proxies,hosts,headers}
。还要确保您的反向代理/负载均衡器将X-Forwarded-{For,host,Proto,Port}
头信息发送到Symfony。 - Benoit Duffez{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
在Symfony 2.0中,一种解决方法是编写一个Twig扩展来实现这一点。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;
}
并像这样使用
{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}
除非你想要在链接中添加额外的参数(例如在页面导航中),或者你想要更改其中一个参数,否则你不需要这些内容。
您可以这样在Twig中获取当前URL:
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
app.request.query.all
中,然后将该数组合并到 app.request.attributes.get('_route_params')
中。 path()
方法要求您提供路线的所有必需参数,这就是为什么您需要包括 _route_params
。
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
虽然这看起来很丑陋,但如果您正在开发分页功能,则需要在每个单独的链接上修改页面变量,因此每次都必须包含整个内容。也许其他人有更好的解决方案。{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
- FDisk使用 Symfony 5 ,您可以使用以下内容:
{{ app.request.uri }}
如果你正在使用 Silex 2,就不能再访问 Request 对象了。
你可以通过以下方式访问当前请求的属性。
app.request_stack.currentrequest.attributes.get('_route')
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
Framework/Routing/RequestTransformer.php
中定义的一个 sw- *
属性:{% set currentUrl = app.request.attributes.get('sw-original-request-uri') %}
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(如果未安装到域的根目录,则需要getBaseUrl
部分是可选的) - mpen