src/Controller/Frontend/MarktplatzController.php line 52

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 App\Application\Content\ContentFrontendData;
  7. use App\Application\Content\ContentService;
  8. use App\Application\Inserat\InseratService;
  9. use App\Entity\Artikel\ArtikelTyp;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. #[Route(path: '/marktplatz')]
  16. #[Cache(expires: '+10 minutes')]
  17. class MarktplatzController extends AbstractController
  18. {
  19. #[Route(path: '/events', name: 'fe.marktplatz_events')]
  20. public function artikel(InseratService $inseratService): Response
  21. {
  22. return $this->render('frontend/marktplatz/marktplatz.html.twig', [
  23. 'h1_titel' => 'Kommende Events',
  24. 'inserate' => $inseratService->veranstaltungen(),
  25. ]);
  26. }
  27. #[Route(path: '/immobilien', name: 'fe.marktplatz_immobilien')]
  28. public function immobilien(InseratService $inseratService, ContentService $contentService): Response
  29. {
  30. return $this->render('frontend/marktplatz/marktplatz.html.twig', [
  31. 'h1_titel' => 'Immobilien',
  32. 'inserate' => $inseratService->immobilien(),
  33. 'content' => $contentService->getContentByCode('ACCORDION_IMMOBILIEN', new ContentFrontendData(), true),
  34. ]);
  35. }
  36. #[Route(path: '/stellen', name: 'fe.marktplatz_stellen')]
  37. public function stellen(InseratService $inseratService, ContentService $contentService): Response
  38. {
  39. return $this->render('frontend/marktplatz/marktplatz.html.twig', [
  40. 'h1_titel' => 'Stellen',
  41. 'inserate' => $inseratService->stellen(),
  42. 'content' => $contentService->getContentByCode('ACCORDION_STELLEN', new ContentFrontendData(), true),
  43. ]);
  44. }
  45. #[Route(path: '/weitere-angebote', name: 'fe.marktplatz_rest')]
  46. public function rest(InseratService $inseratService): Response
  47. {
  48. return $this->render('frontend/marktplatz/marktplatz.html.twig', [
  49. 'h1_titel' => 'Weitere Angebote',
  50. 'inserate' => $inseratService->rest(),
  51. ]);
  52. }
  53. #[Route(path: '/publireportagen', name: 'fe.marktplatz_publireportagen')]
  54. public function publireportagen(Request $request, ArtikelService $artikelService): Response
  55. {
  56. // --- Artikel ---
  57. $pageSize = 12;
  58. $pageNumber = $request->query->getInt('pg', 1);
  59. $query = new ArtikelServiceQuery($pageSize, $pageNumber, false);
  60. $query->addFilterOneOfStatusOnly(['publiziert']);
  61. $query->addFilterOneOfTypOnly([ArtikelTyp::ID_AT_4]);
  62. $query->addSort('publish_at', 'desc');
  63. $artikels = $artikelService->findArtikels(new ArtikelFrontendData(), $query);
  64. // --- End Artikel ---
  65. $paging = [
  66. 'page_size' => $query->getPageSize(),
  67. 'page_curr' => $query->getPageNr(),
  68. 'page_prev' => $query->getPageNr() == 1 ? null : $query->getPageNr() - 1,
  69. 'page_next' => $query->getPageNextExist() ? $query->getPageNr() + 1 : null,
  70. ];
  71. return $this->render('frontend/rubrik/rubrik.html.twig', [
  72. 'h1_titel' => 'Publireportagen',
  73. 'artikels' => $artikels,
  74. 'paging' => $paging,
  75. ]);
  76. }
  77. }