src/Controller/Frontend/FrontendController.php line 24

  1. <?php
  2. namespace App\Controller\Frontend;
  3. use App\Common\CarLister;
  4. use App\Entity\Car;
  5. use App\Entity\CarCategory;
  6. use App\Entity\CmsPage;
  7. use App\Value\CarStatus;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class FrontendController extends AbstractController {
  13.     private EntityManagerInterface $entityManager;
  14.     public function __construct(EntityManagerInterface $entityManager) {
  15.         $this->entityManager $entityManager;
  16.     }
  17.     #[Route('/'name'app_frontend_index')]
  18.     public function index() : Response {
  19.         $page $this->entityManager->getRepository(CmsPage::class)->findOneBy([ 'template' => 'homepage' ]);
  20.         return $this->render('frontend/template/homepage.html.twig', [
  21.             'page' => $page,
  22.         ]);
  23.     }
  24.     #[Route('/{slug}'name'app_frontend_page')]
  25.     public function page(string $slug) : Response {
  26.         $page $this->entityManager->getRepository(CmsPage::class)->findOneBy([ 'slug' => $slug ]);
  27.     if ($page === null) {
  28.         throw $this->createNotFoundException('Stránka nenalezena.');
  29.     }
  30.     return $this->render('frontend/template/'.basename($page->getTemplate()).'.html.twig', [
  31.         'page' => $page
  32.     ]);
  33.     }
  34.     #[Route('/auto/{slug}'name'app_frontend_car')]
  35.     public function car(string $slug) : Response {
  36.         $query $this->entityManager->createQueryBuilder('c')
  37.             ->select('c')
  38.             ->from(Car::class, 'c')
  39.             ->where('c.slug = :slug AND c.status = :status')
  40.             ->setMaxResults(1)
  41.             ->setParameter('slug'$slug)
  42.             ->setParameter('status'CarStatus::Published->value);
  43.         $car $query->getQuery()->getSingleResult();
  44.         if(!$car) {
  45.             throw $this->createNotFoundException('Car does not exist');
  46.         }
  47.         return $this->render('frontend/template/car/detail.html.twig', [ 'car' => $car ]);
  48.     }
  49.     #[Route('/kategorie/{slug}'name'app_frontend_car_category')]
  50.     public function carCategory(string $slug) : Response {
  51.         $category $this->entityManager->getRepository(CarCategory::class)->findOneBy([ 'slug' => $slug ]);
  52.         if(!$category) {
  53.             throw $this->createNotFoundException('Car category does not exist');
  54.         }
  55.         $filterTags = [];
  56.         $sortTags = [
  57.             [ 'title' => 'Cena vzestupně''tag' => 'price_asc' ],
  58.             [ 'title' => 'Cena sestupně''tag' => 'price_desc' ],
  59.         ];
  60.         $defaultFilterTag 'new';
  61.         $defaultSortTag 'price_asc';
  62.         switch($category->getName()) {
  63.             case 'audi':
  64.             case 'volkswagen':
  65.             case 'utility-cars':
  66.                 $filterTags = [
  67.                     [ 'title' => 'Nové vozy''tag' => 'new' ],
  68.                     [ 'title' => 'Ojeté vozy''tag' => 'used' ],
  69.                     [ 'title' => 'Předváděcí vozy''tag' => 'demonstration' ],
  70.                 ];
  71.                 $defaultFilterTag 'new';
  72.                 break;
  73.             case 'used-cars':
  74.                 $filterTags = [
  75.                     [ 'title' => 'Ojeté vozy''tag' => 'used' ],
  76.                     [ 'title' => 'Předváděcí vozy''tag' => 'demonstration' ],
  77.                 ];
  78.                 $defaultFilterTag 'used';
  79.                 break;
  80.             case 'demonstration-cars':
  81.                 // No filter tags
  82.                 $defaultFilterTag 'demonstration';
  83.                 break;
  84.         }
  85.         $lister = new CarLister($this->entityManager);
  86.         $cars $lister->list([
  87.             'offset' => 0,
  88.             'limit' => 12,
  89.             'category' => $category->getName(),
  90.             'filter' => $defaultFilterTag,
  91.             'sort' => $defaultSortTag,
  92.         ]);
  93.         return $this->render('frontend/template/car/category.html.twig', [
  94.             'category' => $category,
  95.             'cars' => $cars,
  96.             'filter_tags' => $filterTags,
  97.             'filter_default_tag' => $defaultFilterTag,
  98.             'sort_tags' => $sortTags,
  99.             'sort_default_tag' => $defaultSortTag,
  100.         ]);
  101.     }
  102. }