authorizationHelper = $authorizationHelper; } public function personAddressApi($id, Request $request, string $_format): Response { return $this->addRemoveSomething('address', $id, $request, $_format, 'address', Address::class, ['groups' => ['read']]); } /** * @Route("/api/1.0/person/address/suggest/by-person/{person_id}.{_format}", * name="chill_person_address_suggest_by_person", * requirements={ * "_format": "json" * } * ) * @ParamConverter("person", options={"id": "person_id"}) */ public function suggestAddress(Person $person, Request $request, string $_format): Response { $this->denyAccessUnlessGranted(PersonVoter::SEE, $person); $addresses = []; // collect addresses from location in courses foreach ($person->getAccompanyingPeriodParticipations() as $participation) { if (null !== $participation->getAccompanyingPeriod()->getAddressLocation()) { $a = $participation->getAccompanyingPeriod()->getAddressLocation(); $addresses[$a->getId()] = $a; } } // remove the actual address $actual = $person->getCurrentHouseholdAddress(); if (null !== $actual) { $addresses = array_filter($addresses, static fn ($a) => $a !== $actual); } return $this->json(array_values($addresses), Response::HTTP_OK, [], ['groups' => ['read']]); } protected function createEntity(string $action, Request $request): object { return parent::createEntity($action, $request); // TODO temporary hack to allow creation of person with fake center /* $centers = $this->authorizationHelper->getReachableCenters($this->getUser(), new Role(PersonVoter::CREATE)); $person->setCenter($centers[0]); */ } }