factory->createItem('root'); } protected function createMenu(array $menuItems): ItemInterface { $menu = $this->createRootElement(); foreach ($menuItems as $menuItem) { $addedItem = $this->createMenuItem($menu, $menuItem); if (isset($menuItem['hideChildren'])&& true === $menuItem['hideChildren']) { $addedItem->setDisplayChildren(false); } if (isset($menuItem['children'])) { foreach ($menuItem['children'] as $subMenuItem) { $addedSubItem = $this->createMenuItem($addedItem, $subMenuItem); if (isset($subMenuItem['children'])) { $addedSubItem->setDisplayChildren(false); foreach ($subMenuItem['children'] as $hiddenItem) { $this->createMenuItem($addedSubItem, $hiddenItem); } } } } } return $menu; } protected function createMenuItem(ItemInterface $menu, array $options): ItemInterface { $itemOptions = []; if (false !== $options['route']) { $itemOptions['route'] = $options['route']; $itemOptions['linkAttributes'] = ['title' => $options['title']]; } if (isset($options['routeParameters'])) { $itemOptions['routeParameters'] = $options['routeParameters']; } $addedItem = $menu ->addChild($options['title'], $itemOptions) ->setChildrenAttribute('title', $options['title']) ; if (isset($options['icon'])) { $addedItem->setExtra('icon', $options['icon']); } return $addedItem; } protected function getDefaultRouteParameters(string $parameter = 'id', string $default = '0'): array { return [$parameter => $this->requestStack->getMainRequest()->get($parameter, $default)]; } protected function addAdminItem(ItemInterface $menu): void { if ($this->security->isGranted('ROLE_ADMIN')) { $menu ->addChild('zum Adminbereich', ['route' => 'app_admin_index']) ->setChildrenAttribute('title', 'zum Adminbereich') ->setExtra('icon', 'user') ; } } protected function addTeamerItem(ItemInterface $menu): void { if ($this->security->isGranted('ROLE_TEAMER')) { $menu ->addChild('zum Teamerbereich', ['route' => 'app_teamer_index']) ->setChildrenAttribute('title', 'zum Teamerbereich') ->setExtra('icon', 'user') ; } } protected function addLogoutItem(ItemInterface $menu): void { $token = $this->security->getToken(); if ($token instanceof SwitchUserToken) { /** @var User $originalUser */ $originalUser = $token->getOriginalToken()->getUser(); $menu ->addChild('Logout', [ 'route' => $originalUser->getDefaultRoute(), 'routeParameters' => ['_switch_user' => '_exit'], 'linkAttributes' => [ 'title' => 'zurück', ], ]) ->setExtra('icon', 'logout') ; } else { $menu ->addChild('Logout', [ 'route' => 'app_security_logout', 'linkAttributes' => [ 'title' => 'Logout', ], ]) ->setExtra('icon', 'logout') ; } } protected function addDivider(ItemInterface $menu): void { $menu->addChild(Uuid::v4(), [ 'extras' => [ 'divider' => true, ], ]); } }