Symfony2-在TWIG模板中获取当前URL或路由


Symfony2 - Get the current URL or route in TWIG template?

我的路线是

admin:
      path:     /admin/
      defaults: { _controller: CatalogWebBundle:Admin:admin }

如何在PHP模板中获取路由名称?

获取当前URL

$request->getRequestUri();app.request.uri

至于路由本身,最佳实践是将其作为参数注入控制器中,请参阅此处的文档。您可以使用$request->attributes->get('_route')app.request.attributes.get('_route'),但它不那么可靠,例如,它不能像转发到控制器而不是路径那样使用转发。根据创建者Fabien(@fabpot)的说法,它实际上只是为了调试目的,所以为了未来的升级,我不会依赖它。

旁注

记住尽可能避免$request->get(),所以没有$request->get('_route'),就像我在类似问题的一些答案中看到的那样

如果你不需要控制器的灵活性,最好从适当的公共属性显式获取请求参数相反(属性、查询、请求)

原因是它将在所述公共属性(属性、查询和请求)中查找,而不仅仅是一个(属性),这使得速度慢得多

直接在Twig中做不是一件好事,但你仍然可以这样做。更好的方法是将其作为控制器的参数传递。

在Twig中获取路线参数。

{{ app.request.attributes.get('_route_params') }}

获取Twig中的整个捆绑包名称。

{{ app.request.attributes.get("_controller") }}

在Twig中获取路线名称。

{{ app.request.attributes.get('_route') }}

要在Symfony2中获取路由名称,请输入以下代码段

$request = $this->container->get('request');
$routeName = $request->get('_route');

要在Symfony2、中获取URL

$request = $this->container->get('request');
$routeURL = $request->getRequestUri();

补充说,在某些情况下,app.request.uri不会返回当前页面的url。

示例:在您的页面模板中,您通过调用控制器

{{ render(controller('AppBundle:MyController:myBlock')) }}

myBlockAction中,渲染另一个模板,比如block.html.twig

block.html.twig调用app.request.uri将显示以下内容:

http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock

如果你想从block.html.twig内部获得渲染页面的绝对url,你可以从php$_SERVER变量中重新组装它:

{{ app.request.server.get('REQUEST_SCHEME') ~ '://' ~ 
   app.request.server.get('SERVER_NAME') ~ 
   app.request.server.get('PHP_SELF') }}

如果需要,也可以添加QUERY_STRING

在symfony5上,您可以执行此操作。

调用控制器块并传递当前url:

{{ render_esi(controller('App''Controller''Frontend''BlockController::social',{'pageUri': app.request.uri })) }}

<?php
namespace App'Controller'Frontend;
use Symfony'Bundle'FrameworkBundle'Controller'AbstractController;
class BlockController extends AbstractController {
    public function social($pageUri) {
        return $this->render('block/_social.html.twig', ['pageUri' => $pageUri]);
    }
}

输出分支:'block/_social.html.trick'

<small>Current Url : {{ pageUri  }}</small>