簡體   English   中英

Symfony2 - 在twig partial / subrequest中獲取主要請求的當前路由

[英]Symfony2 - get main request's current route in twig partial/subrequest

在由獨立控制器呈現的Twig部分呈現中,我想檢查當前主路由是否等於比較路由,因此我可以將列表項標記為活動。

我怎樣才能做到這一點? 試圖在BarController中獲取當前路線,如:

$route = $request->get('_route');

返回null

Uri也不是我想要的,因為在bar的樹枝上調用下面的代碼:

app.request.uri

返回類似於: localhost/_fragment?path=path_to_bar_route路由

完整的例子

主控制器:FooController擴展Controller {

    public function fooAction(){}
}

fooAction樹枝:

...some stuff...

{{ render(controller('FooBundle:Bar:bar')) }}

...some stuff...

酒吧控制器:

BarController extends Controller{

    public function barAction(){}
}

barAction樹枝:

<ul>   
    <li class="{{ (item1route == currentroute) ? 'active' : ''}}">
        Item 1
    </li>
    <li class="{{ (item2route == currentroute) ? 'active' : ''}}">
        Item 2
    </li>
    <li class="{{ (item3route == currentroute) ? 'active' : ''}}">
        Item 3
    </li>  
</ul>

帕布蘭的解決方案應該有效。 但是,原始問題可能是因為request_stack

http://symfony.com/blog/new-in-symfony-2-4-the-request-stack

由於您處於子請求中,因此您應該能夠獲得頂級( masterRequest並獲取_route 像這樣的東西:

public function barAction(Request $request) {
    $stack = $this->get('request_stack');
    $masterRequest = $stack->getMasterRequest();
    $currentRoute = $masterRequest->get('_route');

    ...
    return $this->render('Template', array('current_route' => $currentRoute );
}

沒有運行它但它應該工作...

我認為在你的情況下,最好的解決方案是通過渲染中的當前主路徑:

{{ render(controller('FooBundle:Bar:bar', {'current_route' : app.request.uri})) }}

接下來,在響應中返回它:

public function barAction(Request $request) {
    ...
    return $this->render('Template', array('current_route' => $request->query->get('current_route'));
}

並在您的模板中與收到的值進行比較。

否則,如果你不需要額外的部分邏輯,也許最好使用include而不是render。

在twig中你可以將請求對象從主控制器發送到子控制器作為參數:

{{ render(controller('FooBundle:Bar:bar', {'request' : app.request})) }}

在子控制器中:

BarController extends Controller{

    public function barAction(Request $request){
// here you can use request object as regular
$country = $request->attributes->get('route_country');
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM