moduleTemplate->getDocHeaderComponent()->getMenuRegistry(); * * // Create and configure a menu * $menu = $this->componentFactory->createMenu(); * $menu->setIdentifier('viewSelector')->setLabel('View'); * * // Add menu items * $listItem = $this->componentFactory->createMenuItem() * ->setTitle('List') * ->setHref('/module?view=list') * ->setActive($currentView === 'list'); * $menu->addMenuItem($listItem); * * // Register the menu * $menuRegistry->addMenu($menu); * } * ``` */ class MenuRegistry { /** * Internal array that stores all registered menus * * @var array */ protected array $menus = []; /** * Adds a menu to the registry * * @throws \InvalidArgumentException In case a menu is not valid */ public function addMenu(Menu $menu): static { if (!$menu->isValid()) { throw new \InvalidArgumentException('Menu "' . $menu->getIdentifier() . '" is not valid', 1442236362); } $this->menus[$menu->getIdentifier()] = clone $menu; return $this; } /** * Returns all menus in an abstract array * * @return Menu[] */ public function getMenus(): array { foreach ($this->menus as $key => $menu) { if (empty($menu->getMenuItems())) { unset($this->menus[$key]); } } return $this->menus; } }