簡體   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