src/Controller/SearchController.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Properties;
  4. use App\Form\SearchType;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. class SearchController extends AbstractController
  11. {
  12.     /**
  13.      * @Route("/search", name="app_search_new", methods={"GET", "POST"})
  14.      */
  15.     public function new(string $include nullRequest $requestEntityManagerInterface $entityManager): Response
  16.     {
  17.         $form $this->createForm(SearchType::class);
  18.         $form->handleRequest($request);
  19.         if ($form->isSubmitted() && $form->isValid()) {
  20.             $formData $form->getData();
  21.             $villeValue $formData['inputVille'];
  22.             $typeBienValue $formData['selectTypeBien'];
  23.             $transactionValue $formData['selectTransaction'];
  24.             $prixMin $formData['inputPrixMin'];
  25.             $prixMax $formData['inputPrixMax'];
  26.             // Construire la requête de recherche
  27.             $queryBuilder $entityManager->createQueryBuilder();
  28.             $queryBuilder->select('p')
  29.                 ->from(Properties::class, 'p')
  30.                 ->join('p.address''a')
  31.                 ->leftJoin('p.category''c')
  32.                 ->leftJoin('p.housingType''ht');
  33.             // Filtrer par ville avec LIKE
  34.             if (!empty($villeValue)) {
  35.                 $queryBuilder->andWhere('a.city LIKE :ville')
  36.                     ->setParameter('ville''%'.$villeValue.'%');
  37.             }
  38.             // Filtrer par type de bien
  39.             if (!empty($typeBienValue)) {
  40.                 $queryBuilder->andWhere('ht.name = :typeBien')
  41.                     ->setParameter('typeBien'$typeBienValue->getName());
  42.             }
  43.             // Filtrer par type de transaction
  44.             if (!empty($transactionValue)) {
  45.                 $queryBuilder->andWhere('c.name = :transaction')
  46.                     ->setParameter('transaction'$transactionValue->getName());
  47.             }
  48.             // Filtrer par prix minimum
  49.             if (!empty($prixMin)) {
  50.                 $queryBuilder->andWhere('p.price >= :prixMin')
  51.                     ->setParameter('prixMin'$prixMin);
  52.             }
  53.             // Filtrer par prix maximum
  54.             if (!empty($prixMax)) {
  55.                 $queryBuilder->andWhere('p.price <= :prixMax')
  56.                     ->setParameter('prixMax'$prixMax);
  57.             }
  58.             // Exécuter la requête et obtenir les résultats
  59.             $properties $queryBuilder->getQuery()->getResult();
  60.             return $this->render('search/results.html.twig', [
  61.                 'properties' => $properties,
  62.             ]);
  63.         }
  64.         if($include == "nav") { 
  65.             return $this->render('search/newNav.html.twig', [
  66.                 'form' => $form->createView(),
  67.             ]);
  68.         }
  69.          else {
  70.         // Rendre le formulaire de recherche
  71.         return $this->render('search/new.html.twig', [
  72.             'form' => $form->createView(),
  73.         ]);
  74.     }
  75. }
  76. }