protected function url(MenuItem $item, $type)
 {
     $route = $item->getRoute()->getRoute();
     $parameters = [];
     /** @var MenuItemParameter $parameter */
     foreach ($item->getParameters() as $parameter) {
         $key = $parameter->getParameter()->getParameter();
         $parameters[$key] = $this->getValue($parameter);
     }
     return $this->router->generate($route, $parameters, $type);
 }
 public function addItemAction(Menu $menu, $routeId, $parentId, Request $request)
 {
     $routeRepository = $this->container->get('wucdbm_menu_builder.repo.routes');
     $route = $routeRepository->findOneById($routeId);
     $item = new MenuItem();
     $item->setRoute($route);
     $item->setMenu($menu);
     $menu->addItem($item);
     if ($parentId) {
         $menuItemRepository = $this->container->get('wucdbm_menu_builder.repo.menus_items');
         $parent = $menuItemRepository->findOneById($parentId);
         $item->setParent($parent);
         $parent->addChild($item);
     }
     return $this->editCreateItem($item, $this->generateUrl('wucdbm_menu_builder_client_menu_item_add', ['id' => $menu->getId(), 'routeId' => $routeId, 'parentId' => $parentId]), $request);
 }
 public function save(MenuItem $item)
 {
     $em = $this->getEntityManager();
     $conn = $em->getConnection();
     $conn->beginTransaction();
     try {
         foreach ($item->getParameters() as $parameter) {
             $em->persist($parameter);
         }
         $em->persist($item);
         $em->flush();
         $conn->commit();
     } catch (\Exception $e) {
         $conn->rollBack();
         throw $e;
     }
 }