src/Controller/Frontend/FrontendController.php line 24
<?php
namespace App\Controller\Frontend;
use App\Common\CarLister;
use App\Entity\Car;
use App\Entity\CarCategory;
use App\Entity\CmsPage;
use App\Value\CarStatus;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class FrontendController extends AbstractController {
private EntityManagerInterface $entityManager;
public function __construct(EntityManagerInterface $entityManager) {
$this->entityManager = $entityManager;
}
#[Route('/', name: 'app_frontend_index')]
public function index() : Response {
$page = $this->entityManager->getRepository(CmsPage::class)->findOneBy([ 'template' => 'homepage' ]);
return $this->render('frontend/template/homepage.html.twig', [
'page' => $page,
]);
}
#[Route('/{slug}', name: 'app_frontend_page')]
public function page(string $slug) : Response {
$page = $this->entityManager->getRepository(CmsPage::class)->findOneBy([ 'slug' => $slug ]);
if ($page === null) {
throw $this->createNotFoundException('Stránka nenalezena.');
}
return $this->render('frontend/template/'.basename($page->getTemplate()).'.html.twig', [
'page' => $page
]);
}
#[Route('/auto/{slug}', name: 'app_frontend_car')]
public function car(string $slug) : Response {
$query = $this->entityManager->createQueryBuilder('c')
->select('c')
->from(Car::class, 'c')
->where('c.slug = :slug AND c.status = :status')
->setMaxResults(1)
->setParameter('slug', $slug)
->setParameter('status', CarStatus::Published->value);
$car = $query->getQuery()->getSingleResult();
if(!$car) {
throw $this->createNotFoundException('Car does not exist');
}
return $this->render('frontend/template/car/detail.html.twig', [ 'car' => $car ]);
}
#[Route('/kategorie/{slug}', name: 'app_frontend_car_category')]
public function carCategory(string $slug) : Response {
$category = $this->entityManager->getRepository(CarCategory::class)->findOneBy([ 'slug' => $slug ]);
if(!$category) {
throw $this->createNotFoundException('Car category does not exist');
}
$filterTags = [];
$sortTags = [
[ 'title' => 'Cena vzestupně', 'tag' => 'price_asc' ],
[ 'title' => 'Cena sestupně', 'tag' => 'price_desc' ],
];
$defaultFilterTag = 'new';
$defaultSortTag = 'price_asc';
switch($category->getName()) {
case 'audi':
case 'volkswagen':
case 'utility-cars':
$filterTags = [
[ 'title' => 'Nové vozy', 'tag' => 'new' ],
[ 'title' => 'Ojeté vozy', 'tag' => 'used' ],
[ 'title' => 'Předváděcí vozy', 'tag' => 'demonstration' ],
];
$defaultFilterTag = 'new';
break;
case 'used-cars':
$filterTags = [
[ 'title' => 'Ojeté vozy', 'tag' => 'used' ],
[ 'title' => 'Předváděcí vozy', 'tag' => 'demonstration' ],
];
$defaultFilterTag = 'used';
break;
case 'demonstration-cars':
// No filter tags
$defaultFilterTag = 'demonstration';
break;
}
$lister = new CarLister($this->entityManager);
$cars = $lister->list([
'offset' => 0,
'limit' => 12,
'category' => $category->getName(),
'filter' => $defaultFilterTag,
'sort' => $defaultSortTag,
]);
return $this->render('frontend/template/car/category.html.twig', [
'category' => $category,
'cars' => $cars,
'filter_tags' => $filterTags,
'filter_default_tag' => $defaultFilterTag,
'sort_tags' => $sortTags,
'sort_default_tag' => $defaultSortTag,
]);
}
}