src/Controller/Web/HomeController.php line 27

  1. <?php
  2. namespace App\Controller\Web;
  3. use App\Facade\Order\OrderDTO;
  4. use App\Facade\Order\OrderMapper;
  5. use App\Form\Web\Contact\ContactType;
  6. use App\Form\Web\Order\OrderType;
  7. use App\Mailer\OrderMailer;
  8. use App\Repository\Catalogue\CategoryRepository;
  9. use App\Repository\Catalogue\OptionRepository;
  10. use App\Repository\Catalogue\ProductRepository;
  11. use App\Repository\Navigation\NavigationRepository;
  12. use App\Repository\Order\OrderRepository;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  19. #[Route(path'/')]
  20. final class HomeController extends WebController
  21. {
  22.     #[Route(path''name'homepage')]
  23.     #[Template]
  24.     public function indexAction(
  25.         Request $request,
  26.         OptionRepository $optionRepository,
  27.         OrderMapper $mapper,
  28.         OrderMailer $mailer
  29.     ) {
  30.         $freeOptions $optionRepository->findBy(['free' => true]);
  31.         $paidOptions $optionRepository->findBy(['free' => false]);
  32.         $form $this->createForm(OrderType::class);
  33.         $form->handleRequest($request);
  34.         if ($form->isSubmitted() && $form->isValid()) {
  35.             /** @var OrderDTO $dto */
  36.             $dto $form->getData();
  37.             $order $mapper->mapDTO($dto);
  38.             $mailer->sendEmail($order);
  39.             $this->addFlash('success''Vaše poptávka byla úspěšně odeslána, v nejbližší době vás budeme kontaktovat.');
  40.             return $this->redirectToRoute('homepage');
  41.         }
  42.         $formContact $this->createForm(ContactType::class);
  43.         $formContact->handleRequest($request);
  44.         if ($formContact->isSubmitted() && $formContact->isValid()) {
  45.             $contactData $formContact->getData();
  46.             $mailer->sendContactEmail($contactData'rezervace@garazemlynskyrybnik.cz');
  47.             $this->addFlash('success''Váš dotaz byl úspěšně odeslán, v nejbližší době vás budeme kontaktovat.');
  48.             return $this->redirectToRoute('homepage');
  49.         }
  50.         return [
  51.             'free_options' => $freeOptions,
  52.             'paid_options' => $paidOptions,
  53.             'form' => $form->createView(),
  54.             'form_contact' => $formContact->createView(),
  55.         ];
  56.     }
  57.     #[Route(path'/svg'name'homepage_svg')]
  58.     public function svgAction(
  59.         ProductRepository $repository
  60.     ) {
  61.         $svg $this->render('web/home/svg.html.twig', [
  62.             'products' => $repository->findBy(['deleted' => false]),
  63.         ])->getContent();
  64.         $response = new Response($svg);
  65.         $disposition $response->headers->makeDisposition(
  66.             ResponseHeaderBag::DISPOSITION_INLINE,
  67.             'garage.svg'
  68.         );
  69.         $response->headers->set('Content-Disposition'$disposition);
  70.         return $response;
  71.     }
  72. }