<?php
namespace App\Controller;
use App\Entity\Company;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SearchController extends AbstractController
{
#[Route('/search/{page}', name: 'app_search', requirements: ['page' => '\d+'], defaults: ['page' => 1])]
public function index(
Request $request,
ManagerRegistry $managerRegistry,
$page,
): Response
{
$query = $request->get('query');
$companies = [];
$pageCount = 0;
if ($query) {
// get the company repository
$companyRepository = $managerRegistry->getManager()->getRepository(Company::class);
// build the query for the doctrine paginator
$sql = $companyRepository->createQueryBuilder('c')
->where('c.denumire LIKE :query')
->setParameter('query', '%' . $query . '%')
->orderBy('c.denumire', 'ASC')
->getQuery();
//set page size
$pageSize = 1;
// load doctrine Paginator
$paginator = new Paginator($sql);
// you can get total items
$totalItems = count($paginator);
// get total pages
$pageCount = ceil($totalItems / $pageSize);
// now get one page's items:
$paginator
->getQuery()
->setFirstResult($pageSize * ($page-1)) // set the offset
->setMaxResults($pageSize); // set the limit
$companies = $paginator->getIterator();
}
return $this->render('search/index.html.twig', [
'companies' => $companies,
'currentPage' => $page,
'query' => $query,
'pageCount' => $pageCount,
]);
}
}