2014-01-17 5 views
2

мой вопрос связан со следующим, это «правильный» способ или есть лучшее решение?KnpMenuBundle, держите Главное меню активным даже для вспомогательных действий

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 выглядит следующим образом для маршрута "судно/создать"

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

Как вы можете видеть, нет ничего set 'active' Нужно ли добавлять вспомогательные действия, такие как создать обновление для удаления в меню, и скрыть их? Как решить эту проблему, пожалуйста?

+0

возможно дубликат [Symfony2 KnpMenuBundle: установить активный пункт меню, даже если его не в этом меню] (http://stackoverflow.com/questions/14674820/symfony2-knpmenubundle-set-active-a-menu -item-even-when-its-not-on-the-menu) –

+0

Как упоминалось выше, я ссылаюсь на этот вопрос. Разве вы не читали мой пост? – DasLicht

ответ

3

Проблема с вашим кодом в том, что вы устанавливаете корень $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); 
} 
+0

Спасибо вам большое! – DasLicht

+0

Благодарим вас за сообщение! – Splendonia

+0

Я обновил http://stackoverflow.com/questions/14674820/symfony2-knpmenubundle-set-active-a-menu-item-even-when-its-not-on-that-menu/38764723#38764723 с лучшим способом делать это. –