在symfony2中,如上所述,我想在控制器或模板中将指定的菜单子菜单设置为活动状态,如何实现?也就是说,我希望几个路由(控制器操作,模板)映射到一个菜单子菜单,这是可能的吗?我想我可以在控制器或模板中获取菜单,并将其设置为活动。
发布于 2012-07-10 16:12:54
这在使用KNPMenuBundle.时已经实现了为first last和current元素自动生成类。
您的菜单将自动如下所示:
<ul>
<li class="first">
<a href="/whatever1">Menu Level 1</a>
</li>
<li class="current">
<a href="/whatever2">Menu Level 2</a>
</li>
<li class="last">
<a href="/whatever3">Menu Level 3</a>
</li>
</ul>假设您以这种方式使用菜单生成器:
//src/Acme/YourBundle/Menu/MenuBuilder.php
public function createSimpleMenu(Request $request)
{
$menu = $this->factory->createItem('root');
$menu->setCurrentUri($request->getRequestUri());
$menu->addChild('Menu Level 1', array('route' => '_route_whatever1'));
$menu->addChild('Menu Level 2', array('route' => '_route_whatever2'));
$menu->addChild('Menu Level 3', array('route' => '_route_whatever3'));
return $menu;
}因此,您需要将css应用于current,而不是active。如你所见,这项工作是由$menu->setCurrentUri($request->getRequestUri());实现的。
如果您希望手动自定义菜单(在本例中,您希望有多个映射到同一元素的路由),则可以使用switch语句:
//src/Acme/YourBundle/Menu/MenuBuilder.php
public function createSimpleMenu(Request $request)
{
// YOUR MENU AS USUAL FIRST
// ...
// A SWITCH IF YOU WISH TO CUSTOMIZE MANUALLY
switch($request->get('_route')) {
case "_route_whatever1bis":
$menu['Menu Level 1']->setCurrent(true);
break;
case "_route_whatever2bis":
$menu['Menu Level 2']->setCurrent(true);
break;
case "_route_whatever3bis":
$menu['Menu Level 3']->setCurrent(true);
break;
}
return $menu;
}注意:要自定义KNP菜单包呈现菜单的方式,请覆盖knp_menu.html.twig。您可以查看过程here。
https://stackoverflow.com/questions/11407550
复制相似问题