【问题标题】:KnpMenuBundle, keep Main Menu active even for sub actionsKnpMenuBundle,即使对子操作也保持主菜单处于活动状态
【发布时间】:2014-01-17 14:46:34
【问题描述】:

我的问题与以下有关, 这是“正确”的方式还是有更好的解决方案?

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;
}

路由“ship/create”的渲染 HTML 如下所示

<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>

如您所见,没有设置“活动” 我是否必须将子操作(例如创建更新删除)添加到菜单中,然后隐藏它们? 请问这个问题怎么解决?

【问题讨论】:

标签: symfony twig knpmenubundle


【解决方案1】:

您的代码的问题在于您每次都将根 $menu 项目设置为当前项目。

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);
}

【讨论】:

猜你喜欢
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 2020-08-02
  • 2014-09-24
  • 2012-08-03
  • 2020-01-06
相关资源
最近更新 更多