<?php
namespace App\Controller\Website;
use App\Entity\Country;
use FOS\RestBundle\Controller\Annotations as Rest;
use Sulu\Component\Rest\AbstractRestController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Doctrine\ORM\EntityManagerInterface;
use FOS\RestBundle\View\ViewHandlerInterface;
/**
* @Rest\Route("/api/countries", name="app.countries.", defaults={ "_format" = "json" })
*/
class CountryController extends AbstractRestController
{
private EntityManagerInterface $entityManager;
/**
* Конструктор.
*/
public function __construct(
EntityManagerInterface $entityManager,
ViewHandlerInterface $viewHandler,
?TokenStorageInterface $tokenStorage = null
) {
parent::__construct($viewHandler, $tokenStorage);
$this->entityManager = $entityManager;
}
/**
* Пошук країн по назві.
*
* @Rest\Get("")
*
* @return Response
*/
public function indexAction(Request $request): Response
{
$locale = $request->query->get('locale', 'en');
$searchText = $request->query->get('value', '');
$repository = $this->entityManager->getRepository(Country::class);
$queryBuilder = $repository->createQueryBuilder('c');
if (!empty($searchText)) {
$queryBuilder
->where('LOWER(c.name'. ucfirst(strtolower($locale)) . ') LIKE :searchText')
->setParameter('searchText', strtolower($searchText) . '%');
}
$queryBuilder->setMaxResults(5);
$countries = $queryBuilder->getQuery()->getResult();
// Форматуємо результат у масив для відправки в JSON
$data = [];
foreach ($countries as $country) {
$data[] = [
'id' => $country->getId(),
'label' => $country->getName($locale),
'value' => $country->getCode(),
];
}
return $this->handleView($this->view($data));
}
}