<?php
namespace App\Controller\Front;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use App\Repository\Banner\BannerRepository;
use App\Repository\Article\ServiceRepository;
use App\Repository\Course\PlanRepository;
use App\Entity\Article\Service;
use App\Entity\Booking\Booking;
use App\Form\Booking\BookingType;
class ServiceController extends AbstractController
{
/** @var BannerRepository */
private $bannerRepository;
/** @var ServiceRepository */
private $serviceRepository;
/** @var SessionInterface */
private $session;
/** @var string $theme */
private $theme;
/**
* @param BannerRepository $bannerRepository
* @param Session $session
*/
public function __construct(BannerRepository $bannerRepository, ServiceRepository $serviceRepository, SessionInterface $session)
{
$this->bannerRepository = $bannerRepository;
$this->serviceRepository = $serviceRepository;
$this->session = $session;
$this->theme = $this->session->get('theme', 'horse');
}
public function index(Request $request, PaginatorInterface $paginator, PlanRepository $planRepository): Response
{
$localeCode = $request->getLocale();
$theme = $this->theme;
$booking = new Booking();
$form = $this->createForm(BookingType::class, $booking);
$banner = $this->bannerRepository->findOneBy(['type' => $theme]);
$query = $this->serviceRepository->findServicesQuery($localeCode);
$services = $paginator->paginate($query, $request->query->getInt('page', 1), 9);
$plans = $planRepository->findPlans($localeCode, $theme);
$bookingForm = $form->createView();
return $this->render('front/service/index.html.twig', compact('services', 'banner', 'plans', 'theme', 'bookingForm'));
}
public function show(Request $request, Service $service): Response
{
$localeCode = $request->getLocale();
$medias = $service->getMedias();
$banner = $this->bannerRepository->findOneBy(['type' => $this->theme]);
$service = $this->serviceRepository->findService($service->getId(), $localeCode);
return $this->render('front/service/show.html.twig', compact('service', 'banner', 'medias'));
}
}