繁体   English   中英

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一点,在某些情况下, app.request.uri不会返回当前页面的 url。

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

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

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

要在通话app.request.uriblock.html.twig会显示类似:

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

如果你想从block.html.twig内部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.twig'

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM