2017-09-24 65 views
0

我想在Twig視圖中使用Symfony 3中的當前路由。在Symfony 3.3和Twig中獲取當前路由

我已經做了一些研究,但沒有找到任何解決方案。我嘗試在我的嫩枝觀點如下:

{{ app.request.uri }} 

它返回類似:http://localhost:8000/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3DFOSUserBundle%253ASecurity%253Alogin

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

始終返回NULL。

{{ app.request.getpathinfo }} 

總是有:/_fragment

我需要的是非常簡單的。對於像localhost:8000/article/5這樣的網址,我想檢索/article/5。如何執行此操作?

回答

0

下面的代碼片段將這樣的伎倆:

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }} 

app.request.attributes.get('_route') - 返回當前路徑名。

app.request.attributes.get('_route_params') - 返回當前路徑參數。

path() - 通過路由名稱和參數生成路由路徑。

這種方法不適用於轉發的請求。如果有前向請求,則有workaround:您應該將「_route」和「_route_params」傳遞給轉發的參數列表。你

return $this->forward('Yourbundle:Controller:action', array(
    //... your parameters..., 
    '_route' => $this->getRequest()->attributes->get('_route'), 
    '_route_params' => $this->getRequest()->attributes->get('_route_params'); 
)); 

也可以使用app.request訪問任何Request對象的功能,如getPathInfo(),它應該返回當前路由路徑。

{{ app.request.pathInfo }} 
+1

謝謝,但我讀了幾個消息來源說''app.request.get('_ route')'僅用於調試目的,並且可能會很慢。 與app.request.attributes.get('_ route')'是一樣的嗎? 今天這個問題仍然有關嗎? – Arphel

+0

「app.request」是指一個Request對象,它被設計用於你的應用程序的任何部分(在任何環境中)來訪問與請求相關的信息,而不是使用PHP全局變量。 –

+0

更新了我的回答,並提供瞭解決轉發請求問題的方法。 –