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"); } } protected function buildMenuPerson(MenuItem $menu, array $parameters) { /* @var $person \Chill\PersonBundle\Entity\Person */ $person = $parameters['person']; if ($this->security->isGranted(PersonDocumentVoter::SEE, $person)) { $menu->addChild($this->translator->trans('Documents'), [ 'route' => 'person_document_index', 'routeParameters' => [ 'person' => $person->getId() ] ]) ->setExtras([ 'order'=> 350 ]); } } protected function buildMenuAccompanyingCourse(MenuItem $menu, array $parameters){ $course = $parameters['accompanyingCourse']; if ($this->security->isGranted(AccompanyingCourseDocumentVoter::SEE, $course)) { $menu->addChild($this->translator->trans('Documents'), [ 'route' => 'accompanying_course_document_index', 'routeParameters' => [ 'course' => $course->getId() ] ]) ->setExtras([ 'order' => 400 ]); } } public static function getMenuIds(): array { return [ 'person', 'accompanyingCourse' ]; } }