src/Controller/Website/CountryController.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Website;
  3. use App\Entity\Country;
  4. use FOS\RestBundle\Controller\Annotations as Rest;
  5. use Sulu\Component\Rest\AbstractRestController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use FOS\RestBundle\View\ViewHandlerInterface;
  11. /**
  12.  * @Rest\Route("/api/countries", name="app.countries.", defaults={ "_format" = "json" })
  13.  */
  14. class CountryController extends AbstractRestController
  15. {
  16.     private EntityManagerInterface $entityManager;
  17.     /**
  18.      * Конструктор.
  19.      */
  20.     public function __construct(
  21.         EntityManagerInterface $entityManager,
  22.         ViewHandlerInterface $viewHandler,
  23.         ?TokenStorageInterface $tokenStorage null
  24.     ) {
  25.         parent::__construct($viewHandler$tokenStorage);
  26.         $this->entityManager $entityManager;
  27.     }
  28.     /**
  29.      * Пошук країн по назві.
  30.      *
  31.      * @Rest\Get("")
  32.      *
  33.      * @return Response
  34.      */
  35.     public function indexAction(Request $request): Response
  36.     {
  37.         $locale $request->query->get('locale''en');
  38.         $searchText $request->query->get('value''');
  39.         $repository $this->entityManager->getRepository(Country::class);
  40.         $queryBuilder $repository->createQueryBuilder('c');
  41.         if (!empty($searchText)) {
  42.             $queryBuilder
  43.                 ->where('LOWER(c.name'ucfirst(strtolower($locale)) . ') LIKE :searchText')
  44.                 ->setParameter('searchText'strtolower($searchText) . '%');
  45.         }
  46.         $queryBuilder->setMaxResults(5);
  47.         $countries $queryBuilder->getQuery()->getResult();
  48.         // Форматуємо результат у масив для відправки в JSON
  49.         $data = [];
  50.         foreach ($countries as $country) {
  51.             $data[] = [
  52.                 'id' => $country->getId(),
  53.                 'label' => $country->getName($locale),
  54.                 'value' => $country->getCode(),
  55.             ];
  56.         }
  57.         return $this->handleView($this->view($data));
  58.     }
  59. }