【问题标题】:Symfony2 - Get the current URL or route in TWIG template?Symfony2 - 在 TWIG 模板中获取当前 URL 或路由?
【发布时间】:2015-05-08 22:01:18
【问题描述】:

我的路线是

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

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

【问题讨论】:

  • 我猜在twig中你可以使用app.request.attributes.get('_route')作为php模板你可以导出等效代码

标签: php symfony twig


【解决方案1】:

获取当前网址

$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'),因为我在类似问题的一些答案中看到了

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

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

【讨论】:

【解决方案2】:

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

在 Twig 中获取路由参数。

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

在 Twig 中获取整个包名。

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

在 Twig 中获取路线名称。

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

【讨论】:

    【解决方案3】:

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

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

    在 Symfony2 中获取 URL,

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

    【讨论】:

      【解决方案4】:

      补充一点,在某些情况下,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

      【讨论】:

        【解决方案5】:

        在 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-09
          • 1970-01-01
          • 2013-01-16
          • 2023-03-29
          • 2015-05-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多