/** * Merge Sub Menu * * @param Menu $menu * * @return static */ public function mergeSubMenu(Menu $menu) { $name = $menu->getId(); if (array_key_exists($name, $this->subMenus)) { /** @var $current Menu */ $current = $this->subMenus[$name]; if ($current->conflictsWith($menu)) { while (array_key_exists($name, $this->subMenus)) { if (preg_match('/_(\\d+)$/', $name, $m)) { $name = preg_replace('/_\\d+$/', $m[1]++, $name); } else { $name .= '_2'; } } $menu->setId($name); $this->subMenus[$name] = $menu; } else { $current->setProperties($menu->getProperties()); foreach ($menu->subMenus as $child) { $current->mergeSubMenu($child); } } } else { $this->subMenus[$name] = $menu; } return $this->subMenus[$name]; }