src/Controller/Frontend/SuchenController.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Frontend;
  3. use App\Application\Artikel\ArtikelFrontendData;
  4. use App\Application\Artikel\ArtikelService;
  5. use App\Application\Artikel\ArtikelServiceQuery;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. #[Cache(expires: '+10 minutes')]
  12. class SuchenController extends AbstractController
  13. {
  14. #[Route(path: '/suchen', name: 'fe.suchen')]
  15. public function suchen(Request $request, ArtikelService $artikelService): Response
  16. {
  17. // Validierung aller möglichen URL-Parameter sonst Fehler (Page- und ApiClientCache Cache Schutz)
  18. if (($urlParams = array_keys($request->query->all())) && ($diff_ = array_diff($urlParams, ['pg', 'q']))) {
  19. throw $this->createNotFoundException(sprintf('Suche mit nicht konfiguriertem URL Parameter abgesetzt: %s', implode(',', $diff_)));
  20. }
  21. // Ende
  22. $pageSize = 12;
  23. $pageNumber = $request->query->getInt('pg', 1);
  24. $searchterm = $request->query->get('q');
  25. $minSearchChars = 3;
  26. $artikels = [];
  27. $paging = [];
  28. if ($searchterm && strlen($searchterm) >= $minSearchChars) {
  29. $query = new ArtikelServiceQuery($pageSize, $pageNumber, true);
  30. $query->addFilterIndexSearch($searchterm);
  31. $query->addFilterOneOfStatusOnly(['publiziert']);
  32. $query->addSort('publish_at', 'desc');
  33. $artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
  34. $paging = [
  35. 'records_total' => $query->getTotalRows(),
  36. 'page_size' => $query->getPageSize(),
  37. 'page_curr' => $query->getPageNr(),
  38. 'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
  39. 'page_next' => ($query->getPageNr() >= round($query->getTotalRows() / $query->getPageSize(), PHP_ROUND_HALF_UP)) ? null : $query->getPageNr() + 1,
  40. ];
  41. }
  42. return $this->render('frontend/suchen/suchen.html.twig', [
  43. 'artikels' => $artikels,
  44. 'searchterm' => $searchterm,
  45. 'paging' => $paging,
  46. ]);
  47. }
  48. }