eventDispatcher = $dispatcher; $this->security = $security; } /** * @return array */ public static function getSubscribedEvents(): array { return [ ThemeEvents::THEME_SIDEBAR_SETUP_MENU => ['onSetupNavbar', 100], ]; } /** * Generate the main menu. * * @param SidebarMenuEvent $event */ public function onSetupNavbar(SidebarMenuEvent $event) { $request = $event->getRequest(); $event->addItem( new MenuItemModel('dashboard', 'menu.homepage', 'dashboard', [], 'fas fa-tachometer-alt') ); $menuEvent = new ConfigureMainMenuEvent( $request, $event, new MenuItemModel('admin', 'menu.admin', ''), new MenuItemModel('system', 'menu.system', '') ); $this->eventDispatcher->dispatch(ConfigureMainMenuEvent::CONFIGURE, $menuEvent); // @deprecated since 0.9, will be removed with 1.0 $this->eventDispatcher->dispatch( ConfigureAdminMenuEvent::CONFIGURE, new ConfigureAdminMenuEvent( $request, $menuEvent->getAdminMenu() ) ); if ($menuEvent->getAdminMenu()->hasChildren()) { $event->addItem(new MenuItemModel('admin', 'menu.admin', '')); foreach ($menuEvent->getAdminMenu()->getChildren() as $child) { $event->addItem($child); } } if ($menuEvent->getSystemMenu()->hasChildren()) { $event->addItem(new MenuItemModel('system', 'menu.system', '')); foreach ($menuEvent->getSystemMenu()->getChildren() as $child) { $event->addItem($child); } } $this->activateByRoute( $event->getRequest()->get('_route'), $event->getItems() ); } /** * @param string $route * @param MenuItemModel[] $items */ protected function activateByRoute($route, $items) { foreach ($items as $item) { if ($item->hasChildren()) { $this->activateByRoute($route, $item->getChildren()); } else { if ($item->getRoute() == $route) { $item->setIsActive(true); } } } } }