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

时间:2015-03-07 09:28:37

标签: php symfony twig

我的路线是

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

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

5 个答案:

答案 0 :(得分:14)

获取当前网址

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

至于路线本身,最佳做法是将其作为参数注入控制器,请参阅the doc here。您可以使用$request->attributes->get('_route')app.request.attributes.get('_route'),但它不可靠,例如它won't work with forwards,因为您转发到控制器,而不是路径。它实际上只有meant for debugging purposes according to Fabien (@fabpot), the creator,所以我不会依赖它来进行未来的升级。缘故。

<强>旁注

请尽可能随时avoid $request->get(),所以不要像我在类似问题的某些答案中看到的那样$request->get('_route')

  

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

原因是它会查看所述公共属性(属性,查询和请求)而不仅仅是一个(属性),使其慢得多

答案 1 :(得分:5)

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

在Twig中获取路线参数。

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

在Twig中获取整个包名称。

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

在Twig中获取路线名称。

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

答案 2 :(得分:1)

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

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

获取Symfony2中的URL,

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

答案 3 :(得分:0)

在某些情况下,添加app.request.uri将不会返回当前页面的网址。

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

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

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

来自app.request.uri的{​​{1}}来电显示如下:

block.html.twig

如果你想从http://www.example.com/app.php/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DAppBundle%253AMyController%253AmyBlock 里面获取渲染页面的绝对url,你可以从php $ _SERVER变量重组它:

block.html.twig

如果需要,您还可以添加{{ app.request.server.get('REQUEST_SCHEME') ~ '://' ~ app.request.server.get('SERVER_NAME') ~ app.request.server.get('PHP_SELF') }}

答案 4 :(得分:0)

在symfony5上,您可以这样做。

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

{{ 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.twig'

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