我四处寻找代码来获取Twig模板中的当前路径(而不是完整的URL),也就是说,我不需要http://www.sitename.com/page,我只需要/page。
http://www.sitename.com/page
/page
r1zhe5dt1#
{{ 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,它们引用了您可能在控制器中使用的服务。
app
app.session
app.security.token.user
vawmfj5a2#
获取当前网址:x1个月1个月Symfony 2.3、3、4、5获取仅路径:{{ app.request.pathinfo }}(无参数)获取请求URI:{{ app.request.requesturi }}(带参数)
{{ app.request.pathinfo }}
{{ app.request.requesturi }}
u1ehiz5o3#
在symfony 2.1中,您可以使用以下命令:
在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'}) }}
除非您想向链接添加额外的参数(如在页导航中),或者您想更改其中一个参数,否则您不需要所有这些。
b1uwtaje4#
你可以像这样在Twig中获得当前的URL:
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
ndh0cuux5#
应该注意的是,如果您的URL中有其他查询参数,而这些参数不是配置路由的一部分,则接受的回答将不会在当前URL(路径)中包含它们。
例如,如果您有一个列表页面,其中的记录可以按关键字过滤,并且该页面具有分页功能,则很可能“keyword”和“page”的查询变量不在您的路由中。但是在分页的前进和后退按钮中,您需要完整的当前URL(包含关键字,因此仍会过滤下一页)。并且您需要修改page变量。
因此,您可以获取当前路由,并合并额外变量(在修改一个或多个额外变量之后)。注意,您将自己的变量合并到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 }))) }}这真的很难看,但是如果你正在开发分页,你将需要修改每个单独链接上的page变量,所以你必须每次都包括整个变量。
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 }))) }}
ttvkxqim6#
使用Symfony 5,您可以使用以下命令:
{{ app.request.uri }}
sg24os4d7#
如果您正在使用锡莱克斯2,则无法再访问Request对象。您可以通过这种方式访问当前请求属性。
app.request_stack.currentrequest.attributes.get('_route')
要生成完整的当前URL:path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
monwx1rj8#
在Shopware 6 Twig文件中,可以使用Framework/Routing/RequestTransformer.php中定义的sw-*属性之一:
Framework/Routing/RequestTransformer.php
sw-*
{% set currentUrl = app.request.attributes.get('sw-original-request-uri') %}
/一些/路径?参数=1
8条答案
按热度按时间r1zhe5dt1#
如果要将其读入视图变量:
app
全局视图变量包含各种有用的快捷方式,如app.session
和app.security.token.user
,它们引用了您可能在控制器中使用的服务。vawmfj5a2#
获取当前网址:x1个月1个月Symfony 2.3、3、4、5
获取仅路径:
{{ app.request.pathinfo }}
(无参数)获取请求URI:
{{ app.request.requesturi }}
(带参数)u1ehiz5o3#
在symfony 2.1中,您可以使用以下命令:
在symfony 2.0中,一个解决方案是为此编写一个分支扩展
像这样使用
除非您想向链接添加额外的参数(如在页导航中),或者您想更改其中一个参数,否则您不需要所有这些。
b1uwtaje4#
你可以像这样在Twig中获得当前的URL:
ndh0cuux5#
应该注意的是,如果您的URL中有其他查询参数,而这些参数不是配置路由的一部分,则接受的回答将不会在当前URL(路径)中包含它们。
为什么需要额外的参数?
例如,如果您有一个列表页面,其中的记录可以按关键字过滤,并且该页面具有分页功能,则很可能“keyword”和“page”的查询变量不在您的路由中。但是在分页的前进和后退按钮中,您需要完整的当前URL(包含关键字,因此仍会过滤下一页)。并且您需要修改page变量。
如何合并额外查询参数
因此,您可以获取当前路由,并合并额外变量(在修改一个或多个额外变量之后)。注意,您将自己的变量合并到
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 }))) }}
这真的很难看,但是如果你正在开发分页,你将需要修改每个单独链接上的page变量,所以你必须每次都包括整个变量。
ttvkxqim6#
使用Symfony 5,您可以使用以下命令:
sg24os4d7#
如果您正在使用锡莱克斯2,则无法再访问Request对象。
您可以通过这种方式访问当前请求属性。
要生成完整的当前URL:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
monwx1rj8#
在Shopware 6 Twig文件中,可以使用
Framework/Routing/RequestTransformer.php
中定义的sw-*
属性之一:/一些/路径?参数=1