我的问题是与以下几点有关,这是否“适当”的方法,还是有更好的解决办法?
Symfony2 KnpMenuBundle: set active a menu item even when its not on that menu
这是我目前的代码:
public function mainMenu(FactoryInterface $factory, array $options)
{
$menu = $factory->createItem('root');
$menu->setChildrenAttributes(array('class' => 'nav navbar-nav'));
$menu->addChild('Home',
array('route' => 'home'
));
$menu->addChild('Producers',
array(
'route' => 'producers_show'
));
$menu->addChild('Ships',
array(
'route' => 'ships_show'
));
/* not working */
$request = $this->container->get('request');
$routeName = $request->get('_route');
switch ($routeName)
{
case 'producer_create':
case 'ship_create':
$menu->setCurrent(true);
break;
}
return $menu;
}呈现的HTML对于"ship/create“的路线如下所示
<ul class="nav navbar-nav">
<li class="first">
<a href="/app_dev.php/">Home</a>
</li>
<li>
<a href="/app_dev.php/producers">Producers</a>
</li>
<li class="last">
<a href="/app_dev.php/ships">Ships</a>
</li>
</ul>正如您所看到的,没有任何设置为'active‘,我是否必须添加诸如之类的子操作到菜单中,并隐藏它们?请问我如何解决这个问题?
发布于 2014-01-18 08:43:09
代码的问题是每次都将根$menu项设置为current。
switch (true)
{
case preg_match('/^producer(s)?_/', $routeName):
// setting Producers as the current
$menu->getChild('Producers')->setCurrent(true);
break;
case preg_match('/^ship(s)?_/', $routeName):
// setting Ships as the current
$menu->getChild('Ships')->setCurrent(true);
break;
default:
$menu->setCurrent(true);
}https://stackoverflow.com/questions/21188641
复制相似问题