2016-04-06 37 views
1

我想做一個類別/菜單動態更新鏈接和管理面板的一切。我嘗試從gedmo實現樹,但即使花了數小時查看文檔,也無法獲得孩子。另外我想使用knp菜單包。 有人可以幫我實施它,並向我解釋什麼是從樹,lft,rgt,根,水平,爲什麼我應該用什麼時候我應該使用它們?Gedmo樹沒有管理它實現它

這裏是我的方法:

public function createAdminMenu(array $options) 
{ 
    $menu_item = $this->em->getRepository('AppBundle:MenuItem'); 
    $menu = $this->factoryInterface->createItem('root'); 

    $rootNodes = $menu_item->getRootNodes(); 

    //var_dump($rootNodes); 
    $node = $menu_item->findOneByName('User'); 
    var_dump($menu_item->getChildren()); 
    foreach($rootNodes as $node) { 
     if($node->getDisplay()) 
     { 
      $menu->addChild($node->getName(), array('uri' => $node->getUri())); 

      $child_node = $node->getChildren($node); 
      //var_dump($child_node); 
      foreach($child_node as $child) 
      { 
       //$menu[$node->getName()] = $menu->addChild($child->getName()); 
      } 
     } 
    } 


    return $menu; 
} 

回答

1

解決這樣的:

$repo = $this->em->getRepository('AppBundle:MenuItem'); 

    $nodes = $repo->findByRootNodes($menuId); 

    foreach ($nodes as $node) { 
     if ($node->getDisplay()) { 
      $menu->addChild($node->getName(), ['uri' => $node->getRoute()]) 
       ->setAttribute('dropdown', $node->getDropDown()); 
      if ($node->getDisplayChildren()) { 
       $children = $repo->children($node); 
       if($children) 
       { 
        foreach ($children as $child) 
        { 
         if ($child->getDisplay()) 
         { 
          $menu[$node->getName()]->addChild($child->getName(), ['uri' => $child->getRoute()]) 
           ->setAttribute('divider_prepend', $child->getDividerPrepend()) 
           ->setAttribute('divider_append', $child->getDividerAppend()); 
         } 
        } 
       } 
      } 
     } 
    } 
    return $menu; 
相關問題