/** * Resolve the menu and return the items. * * @param array $items * @return array */ protected function resolveMenu($items, $parentId = null) { $menu = []; foreach ($items as $key => $value) { $key = $this->parseConfig($key); $value = $this->parseConfig($value); // key = title // value = relative page path if (is_string($key) and is_string($value)) { $item = ['name' => $key, 'href' => $this->resolveLink($value)]; } elseif (is_string($key) and $key === 'children' and is_array($value)) { $item = $this->resolveMenu($value); } elseif (isset($value['name'])) { $item = ['name' => $value['name']]; // resolve href if (isset($value['href'])) { $item['href'] = $this->resolveLink($value['href']); } elseif (isset($value['page'])) { $item['href'] = $this->resolveLink($value['page']); } } if (isset($item)) { // generate id $id = md5($item['name'] . (isset($item['href']) ? $item['href'] : '')); $item['id'] = $id; // parent id if (!is_null($parentId)) { $item['parent_id'] = $parentId; } // icon if (isset($value['icon'])) { $item['icon'] = $value['icon']; } // children if (isset($value['children']) and is_array($value['children'])) { $item['children'] = $this->resolveMenu($value['children'], $id); } $this->flatMenu[] = Arr::except($item, ['children']); $menu[] = $item; } } return $menu; }