我四处寻找代码,以获得Twig模板中的当前路径(而不是完整的URL),即。 我不想要http://www.sitename.com/page,我只需要/page。


当前回答

你可以像这样在Twig中获取当前URL:

{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}

其他回答

{{ 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 5,你可以这样做:

{{ app.request.uri }}

在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'}) }}

您不需要所有这些,除非您想向链接添加额外的参数,例如在分页器中,或者您想更改其中一个参数。

如果您正在使用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))

在Symfony 2.3, 3,4,5中获取当前url: {{app.request.uri}}


只获取路径:{{app.request.pathinfo}}(不带参数)


获取请求uri: {{app.request.requesturi}}(带参数)