protected function getPages(ServiceLocatorInterface $serviceLocator) { if (null === $this->pages) { //FETCH data from table menu : $fetchMenu = $serviceLocator->get('menu')->fetchAll(); $container = new \Zend\Navigation\Navigation(); foreach ($fetchMenu as $key => $row) { if (null !== $row['parent_menu_id']) { continue; } $container->addPage(array('id' => $row['menu_id'], 'label' => $row['label'], 'uri' => $row['uri'], 'icon' => $row['icon'])); $i = 0; $menu_items = $fetchMenu; foreach ($menu_items as $item_key => $item) { if ($item['parent_menu_id'] === null) { continue; } if ($row['menu_id'] === $item['parent_menu_id']) { $subPage = array('id' => $item['menu_id'], 'label' => $item['label'], 'icon' => $item['icon']); if (null !== $item['uri']) { $subPage['uri'] = $item['uri']; } else { if (null !== $item['route']) { $subPage['route'] = $item['route']; } } $container->findBy('id', $row['menu_id'])->addPage($subPage); $i++; unset($fetchMenu[$item_key]); } } if ($i === 0) { if (null !== $row['uri']) { $container->findBy('id', $row['menu_id'])->setUri($row['uri']); } else { if (null !== $row['route']) { $container->findBy('id', $row['menu_id'])->setUri($row['uri']); } } unset($fetchMenu[$key]); } } $this->pages = $container; } return $this->pages; }