src/Controller/SearchController.php line 16

Open in your IDE?
  1. <?php
  2.     
  3.     namespace App\Controller;
  4.     
  5.     use App\Entity\Company;
  6.     use Doctrine\ORM\Tools\Pagination\Paginator;
  7.     use Doctrine\Persistence\ManagerRegistry;
  8.     use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9.     use Symfony\Component\HttpFoundation\Request;
  10.     use Symfony\Component\HttpFoundation\Response;
  11.     use Symfony\Component\Routing\Annotation\Route;
  12.     
  13.     class SearchController extends AbstractController
  14.     {
  15.         #[Route('/search/{page}'name'app_search'requirements: ['page' => '\d+'], defaults: ['page' => 1])]
  16.         public function index(
  17.             Request $request,
  18.             ManagerRegistry $managerRegistry,
  19.             $page,
  20.         ): Response
  21.         {
  22.             $query $request->get('query');
  23.             $companies = [];
  24.             $pageCount 0;
  25.             if ($query) {
  26.                 // get the company repository
  27.                 $companyRepository $managerRegistry->getManager()->getRepository(Company::class);
  28.                 // build the query for the doctrine paginator
  29.                 $sql $companyRepository->createQueryBuilder('c')
  30.                     ->where('c.denumire LIKE :query')
  31.                     ->setParameter('query''%' $query '%')
  32.                     ->orderBy('c.denumire''ASC')
  33.                     ->getQuery();
  34.                 //set page size
  35.                 $pageSize 1;
  36.                 // load doctrine Paginator
  37.                 $paginator = new Paginator($sql);
  38.                 // you can get total items
  39.                 $totalItems count($paginator);
  40.                 // get total pages
  41.                 $pageCount ceil($totalItems $pageSize);
  42.                 // now get one page's items:
  43.                 $paginator
  44.                     ->getQuery()
  45.                     ->setFirstResult($pageSize * ($page-1)) // set the offset
  46.                     ->setMaxResults($pageSize); // set the limit
  47.                 $companies $paginator->getIterator();
  48.             }
  49.             return $this->render('search/index.html.twig', [
  50.                 'companies' => $companies,
  51.                 'currentPage' => $page,
  52.                 'query' => $query,
  53.                 'pageCount' => $pageCount,
  54.             ]);
  55.         }
  56.     }