addressReferenceRepository = $addressReferenceRepository; $this->paginatorFactory = $paginatorFactory; } /** * @Route("/api/1.0/main/address-reference/by-postal-code/{id}/search.json") */ public function search(PostalCode $postalCode, Request $request): JsonResponse { $this->denyAccessUnlessGranted('ROLE_USER'); if (!$request->query->has('q')) { throw new BadRequestHttpException('You must supply a "q" parameter'); } $pattern = $request->query->get('q'); if ('' === trim($pattern)) { throw new BadRequestHttpException('the search pattern is empty'); } $nb = $this->addressReferenceRepository->countByPostalCodePattern($postalCode, $pattern); $paginator = $this->paginatorFactory->create($nb); $addresses = $this->addressReferenceRepository->findByPostalCodePattern( $postalCode, $pattern, false, $paginator->getCurrentPageFirstItemNumber(), $paginator->getItemsPerPage() ); return $this->json( new Collection($addresses, $paginator), Response::HTTP_OK, [], [AbstractNormalizer::GROUPS => ['read']] ); } protected function customizeQuery(string $action, Request $request, $qb): void { if ($request->query->has('postal_code')) { $qb->where($qb->expr()->isNull('e.deletedAt')) ->andWhere('e.postcode = :postal_code') ->setParameter('postal_code', $request->query->get('postal_code')); } } protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator, $_format) { $query->addOrderBy('e.street', 'ASC'); $query->addOrderBy('e.streetNumber', 'ASC'); return $query; } }