security = $security; $this->translator = $translator; } public function buildMenu($menuId, MenuItem $menu, array $parameters) { switch ($menuId) { case 'accompanyingCourse': $this->buildMenuAccompanyingCourse($menu, $parameters); break; case 'person': $this->buildMenuPerson($menu, $parameters); break; default: throw new LogicException("this menuid {$menuId} is not implemented"); } } public static function getMenuIds(): array { return ['person', 'accompanyingCourse']; } private function buildMenuAccompanyingCourse(MenuItem $menu, array $parameters) { $course = $parameters['accompanyingCourse']; if ($this->security->isGranted(AccompanyingCourseDocumentVoter::SEE, $course)) { $menu->addChild($this->translator->trans('Documents'), [ 'route' => 'chill_docstore_generic-doc_by-period_index', 'routeParameters' => [ 'id' => $course->getId(), ], ]) ->setExtras([ 'order' => 400, ]); } } private function buildMenuPerson(MenuItem $menu, array $parameters) { /** @var \Chill\PersonBundle\Entity\Person $person */ $person = $parameters['person']; if ($this->security->isGranted(PersonDocumentVoter::SEE, $person)) { $menu->addChild($this->translator->trans('Documents'), [ 'route' => 'chill_docstore_generic-doc_by-person_index', 'routeParameters' => [ 'id' => $person->getId(), ], ]) ->setExtras([ 'order' => 350, ]); } } }