[英]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
由于您处于子请求中,因此您应该能够获得顶级( master
) Request
并获取_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.