protected function addMenuItem($menu, MenuItem $menuItem, $parent = null) { $container = $this->container; if (!($container->has('zym_menu.menu_manager') && $container->has('knp_menu.factory'))) { // ZymMenuBundle doesn't exist return; } /* @var $menuManager Entity\MenuManager */ $menuManager = $this->container->get('zym_menu.menu_manager'); /* @var $menuItemManager Entity\MenuItemManager */ $menuItemManager = $this->container->get('zym_menu.menu_item_manager'); // Management Menu $menu = $menuManager->findOneBy(array('name' => 'management')); if ($menu === null) { return; } $existingMenuItem = $menuItemManager->findMenuItemByName($menu, $menuItem->getName()); if ($existingMenuItem instanceof Entity\MenuItem) { return; } if ($parent !== null) { $parentMenuItem = $menuItemManager->findMenuItemByName($menu, $parent); if ($parentMenuItem === null) { return; } $parentMenuItem->addChild($menuItem); $menuItemManager->createMenuItem($menuItem); $menuItemManager->saveMenuItem($parentMenuItem); } else { $menu->addChild($menuItem); $menuItemManager->createMenuItem($menuItem); $menuManager->saveMenu($menu); } }
/** * Creates a menu item * * @param string $name * @param array $options * @return \Knp\Menu\ItemInterface */ public function createItem($name, array $options = array()) { $item = new MenuItem($name, $this); $options = array_merge(array('uri' => null, 'label' => null, 'attributes' => array(), 'linkAttributes' => array(), 'childrenAttributes' => array(), 'labelAttributes' => array(), 'display' => true, 'displayChildren' => true), $options); $item->setUri($options['uri'])->setLabel($options['label'])->setAttributes($options['attributes'])->setLinkAttributes($options['linkAttributes'])->setChildrenAttributes($options['childrenAttributes'])->setLabelAttributes($options['labelAttributes'])->setDisplay($options['display'])->setDisplayChildren($options['displayChildren']); return $item; }
/** * Delete a menu item * * @param Entity\Menu $menu * * @Route( * "/{menu}/{id}", * requirements={ "_method" = "DELETE"} * ) * @Route("/{menu}/{id}/delete", name="zym_menus_item_delete") * * @Template() * * @SecureParam(name="menu", permissions="EDIT") */ public function deleteMenuItemAction($menu, Entity\MenuItem $menuItem) { $menu = $menuItem->getMenu(); /* @var $menuItemManager Entity\MenuItemManager */ $menuItemManager = $this->get('zym_menu.menu_item_manager'); $form = $this->createForm(new Form\DeleteType(), $menuItem); $request = $this->get('request'); if ($request->getMethod() == 'POST') { $form->bind($request); if ($form->isValid()) { $menuItemManager->deleteMenuItem($menuItem); return $this->redirect($this->generateUrl('zym_menus_show', array('id' => $menu->getName()))); } } if ($request->getMethod() == 'DELETE') { $menuItemManager->deleteMenuItem($menuItem); return $this->redirect($this->generateUrl('zym_menus_show', array('id' => $menu->getName()))); } return array('menu' => $menu, 'menuItem' => $menuItem, 'form' => $form->createView()); }