<?php
namespace App\Controller;
use App\Entity\Properties;
use App\Form\SearchType;
use Doctrine\ORM\EntityManagerInterface;
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", name="app_search_new", methods={"GET", "POST"})
*/
public function new(string $include = null, Request $request, EntityManagerInterface $entityManager): Response
{
$form = $this->createForm(SearchType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$formData = $form->getData();
$villeValue = $formData['inputVille'];
$typeBienValue = $formData['selectTypeBien'];
$transactionValue = $formData['selectTransaction'];
$prixMin = $formData['inputPrixMin'];
$prixMax = $formData['inputPrixMax'];
// Construire la requête de recherche
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder->select('p')
->from(Properties::class, 'p')
->join('p.address', 'a')
->leftJoin('p.category', 'c')
->leftJoin('p.housingType', 'ht');
// Filtrer par ville avec LIKE
if (!empty($villeValue)) {
$queryBuilder->andWhere('a.city LIKE :ville')
->setParameter('ville', '%'.$villeValue.'%');
}
// Filtrer par type de bien
if (!empty($typeBienValue)) {
$queryBuilder->andWhere('ht.name = :typeBien')
->setParameter('typeBien', $typeBienValue->getName());
}
// Filtrer par type de transaction
if (!empty($transactionValue)) {
$queryBuilder->andWhere('c.name = :transaction')
->setParameter('transaction', $transactionValue->getName());
}
// Filtrer par prix minimum
if (!empty($prixMin)) {
$queryBuilder->andWhere('p.price >= :prixMin')
->setParameter('prixMin', $prixMin);
}
// Filtrer par prix maximum
if (!empty($prixMax)) {
$queryBuilder->andWhere('p.price <= :prixMax')
->setParameter('prixMax', $prixMax);
}
// Exécuter la requête et obtenir les résultats
$properties = $queryBuilder->getQuery()->getResult();
return $this->render('search/results.html.twig', [
'properties' => $properties,
]);
}
if($include == "nav") {
return $this->render('search/newNav.html.twig', [
'form' => $form->createView(),
]);
}
else {
// Rendre le formulaire de recherche
return $this->render('search/new.html.twig', [
'form' => $form->createView(),
]);
}
}
}