我四处寻找代码,以获得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。用户,它引用您可能在控制器中使用的服务。
在symfony 2.1中,你可以这样做:
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
在symfony 2.0中,一种解决方案是为此编写一个分支扩展
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'}) }}
您不需要所有这些,除非您想向链接添加额外的参数,例如在分页器中,或者您想更改其中一个参数。
在Symfony 2.3, 3,4,5中获取当前url: {{app.request.uri}}
只获取路径:{{app.request.pathinfo}}(不带参数)
获取请求uri: {{app.request.requesturi}}(带参数)
需要注意的是,如果URL中有额外的查询参数,而这些参数不是配置路由的一部分,则接受的答案将不会将它们包含在当前URL(路径)中。
为什么需要额外的参数?
例如,如果您有一个列表页面,其中的记录可以通过关键字过滤,并且页面具有分页功能,那么“关键字”和“页面”的查询变量很可能不在路由中。但是在分页的前进和后退按钮中,您需要完整的当前URL(其中包含关键字,以便仍然过滤下一页)。您需要修改页面变量。
如何合并在额外的查询参数
因此,您可以获得当前路由,并合并额外的变量(在修改一个或多个额外的变量之后)。请注意,您将自己的变量合并到app.request.query中。然后将该数组合并到app.request.attributes.get('_route_params')中。path()方法要求您提供路由的所有必需参数,这就是为什么您需要包括_route_params。
{{path(app.request. properties .get('_route'), app.request. properties .get('_route_params')|merge(app.request.query. get('_route')所有|merge({'page': 2}))}}
这真的很难看,但如果您正在开发分页,则需要在每个单独的链接上修改page变量,因此每次都必须包含整个内容。也许其他人有更好的解决方案。
你可以像这样在Twig中获取当前URL:
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
如果您正在使用Silex 2,您就不能再访问Request对象了。
您可以通过这种方式访问当前请求属性。
app.request_stack.currentrequest.attributes.get('_route')
并生成完整的当前URL: 路径(app.request_stack.currentrequest.attributes.get(“_route”),app.request_stack.currentrequest.attributes.get (_route_params))
推荐文章
- 在树枝模板得到当前的URL ?
- Symfony 2.x中的所有东西都应该捆绑吗?
- 如何在Symfony 2中获得请求参数?
- 在Doctrine QueryBuilder中计算行数
- 如何在树枝模板中呈现DateTime对象
- 枝:in_array或类似的可能在if语句?
- 如何获得当前的路线在Symfony 2?
- 运行Composer返回:"无法打开输入文件:Composer .phar"
- 使用doctrine2删除级联
- .yaml和.yml扩展名有什么区别?
- 如何检查树枝为空?
- 编写器要求内存不足。PHP致命错误:允许的内存大小为1610612736字节耗尽
- 如何用Composer更新单个库?
- 如何在树枝连接字符串