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') ); $this->eventDispatcher->dispatch( ConfigureMainMenuEvent::CONFIGURE, new ConfigureMainMenuEvent( $request, $event ) ); $admin = new MenuItemModel('admin', 'menu.admin', '', [], 'fas fa-wrench'); $this->eventDispatcher->dispatch( ConfigureAdminMenuEvent::CONFIGURE, new ConfigureAdminMenuEvent( $request, $admin ) ); if ($admin->hasChildren()) { $event->addItem($admin); } $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); } } } } }