我环顾四周寻找代码来获取Twig模板中的当前路径(而不是完整的URL),即我不想要http://www.sitename.com/page,我只需要/page.
Rod*_*olz 240
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
Run Code Online (Sandbox Code Playgroud)
如果要将其读入视图变量:
{% set currentPath = path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) %}
Run Code Online (Sandbox Code Playgroud)
在app全局视图变量包含各种有用的快捷键,如app.session和app.security.token.user,引用您可能会在控制器使用的服务.
mrz*_*myr 179
获取当前网址:{{ app.request.uri }}在Symfony 2.3,3,4中
仅获取路径:{{ app.request.pathinfo }}
Bár*_*más 114
在symfony 2.1中,您可以使用:
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
并使用这样的
{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}
Run Code Online (Sandbox Code Playgroud)
除非您想要在链接中添加其他参数(例如在寻呼机中),或者您想要更改其中一个参数,否则不需要所有这些.
Zah*_*bar 33
您可以在Twig中获取当前URL,如下所示:
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
Run Code Online (Sandbox Code Playgroud)
Cha*_*yer 19
应该注意的是,如果您的URL中有其他查询参数(不是已配置路由的一部分),则接受的答案将不包括在当前URL(路径)中.
例如,如果您有一个列表页面,其中包含可以按关键字过滤的记录,并且页面具有分页,则"关键字"和"页面"的查询变量很可能不在您的路径中.但是在用于分页的前进和后退按钮中,您需要完整的当前URL(包含关键字,以便仍然过滤下一页).您需要修改页面变量.
因此,您可以获取当前路径,并合并其他变量(在修改一个或多个额外变量之后).请注意,您正在将自己的变量合并到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 }))) }}
这真的很难看,但是如果你正在开发分页,你需要在每个单独的链接上修改页面变量,所以你必须每次都包含整个内容.也许其他人有更好的解决方案.
| 归档时间: |
|
| 查看次数: |
253065 次 |
| 最近记录: |