[英]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.uri
從block.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.