src/Controller/SearchController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Services\Api\Attraction\AttractionService;
  4. use App\Services\Api\Category\CategoryService;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. class SearchController extends AbstractController
  11. {
  12.     private $categoryService;
  13.     private $attractionService;
  14.     private $requestStack;
  15.     public function __construct(RequestStack $requestStackCategoryService $categoryServiceAttractionService $attractionService){
  16.         $this->categoryService $categoryService;
  17.         $this->attractionService $attractionService;
  18.         $this->requestStack $requestStack;
  19.     }
  20.     #[Route('/search'name'app_search_page')]
  21.     public function index(Request $request): Response
  22.     {
  23.         $page $request->query->getInt('page'1);
  24.         $categories $this->categoryService->getCategories();
  25.         $categorySearch null;
  26.         $categoryArray = [];
  27.         if ($request->query->has('categoryId')){
  28.             $categoriesString= (string)$request->query->get('categoryId');
  29.             $categoryArray = empty($categoriesString) ? []:explode(','$categoriesString);
  30.             foreach($categoryArray as $array){
  31.                 $categorySearch .= 'categories.id[]='. (int)$array.'&';
  32.             }
  33.             $categorySearch rtrim($categorySearch'&');
  34.         }
  35.         $name = empty($request->query->get('name')) !== true $request->query->get('name') : null;
  36.         $city = empty($request->query->get('city')) !== true $request->query->get('city'): null;
  37.         $state = empty($request->query->get('state')) !== true $request->query->get('state'): null;
  38.         $address = empty($request->query->get('address')) !== true $request->query->get('address'): null;
  39.         $neighborhood = empty($request->query->get('neighborhood')) !== true $request->query->get('neighborhood'): null;
  40.         $categoryId = empty($request->query->get('categoryId')) !== true ? (int) $request->query->get('categoryId') : null ;
  41.         $attractions $this->attractionService->search($name$city$state$address$neighborhood$categorySearch$page);
  42.         $attractions json_decode($attractions->getContent(), true);
  43.         $paginationAttraction $attractions['hydra:view'];
  44.         $pagination = [];
  45.         if (isset($paginationAttraction['hydra:first'])){
  46.             $pagination['first'] = explode('page=',$paginationAttraction['hydra:first'])[1];
  47.             $pagination['last'] = explode('page=',$paginationAttraction['hydra:last'])[1];
  48.         }
  49.         $currentUrl $this->requestStack->getCurrentRequest()->getUri();
  50.         // Supprimez les paramètres de l'URL pour l'instant
  51.         list($urlWithoutParams$params) = explode('?'$currentUrl2);
  52.         // Décodez la partie des paramètres
  53.         $decodedParams rawurldecode($params);
  54.         // Reconstruisez l'URL avec les paramètres décodés
  55.         $currentUrl $urlWithoutParams '?' $decodedParams;
  56.         return $this->render('frontend/search/search.html.twig', [
  57.             'name' => $name,
  58.             'city' => $city,
  59.             'categoryArray' => (array) $categoryArray,
  60.             'categories' => $categories,
  61.             'attractions' =>$attractions['hydra:member'],
  62.             'page' => $page,
  63.             'pagination' => $pagination,
  64.             'currentUrl' => $currentUrl,
  65.             "address" => $address
  66.         ]);
  67.     }
  68. }