在 symfony2 中,如上所述,我想在 Controller 或 Template 中将指定的子菜单设置为活动状态,我该如何实现呢?也就是说,我想要几个路由(控制器动作,模板)映射到一个菜单子,这可能吗?我想我可以在控制器或模板中获取菜单并将其设置为活动状态。
问问题
6801 次
1 回答
5
这在使用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 Menu Bundle 呈现菜单的方式,请覆盖knp_menu.html.twig
. 您可以在此处查看该过程。
于 2012-07-10T08:12:53.757 回答