src/Controller/DefaultController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Mailer\MailerInterface;
  7. use Symfony\Component\Mime\Email;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Security\Csrf\CsrfToken;
  10. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  11. use Twig\Environment;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. class DefaultController extends AbstractController
  14. {
  15.     private $mailer;
  16.     private $csrfTokenManager;
  17.     public function __construct(MailerInterface $mailer, CsrfTokenManagerInterface $csrfTokenManager)
  18.     {
  19.         $this->mailer = $mailer;
  20.         $this->csrfTokenManager = $csrfTokenManager;
  21.     }
  22.       /**
  23.      * @Route("/", name="homepage")
  24.      */
  25.     public function index(): Response
  26.     {
  27.         $csrfToken = $this->csrfTokenManager->getToken('contact_form')->getValue();
  28.         return $this->render('index.html.twig', [
  29.             'csrf_token' => $csrfToken,
  30.         ]);
  31.     }
  32.     #[Route('/Contacto', name: 'Contacto')]
  33.     public function contacto(Request $request, Environment $twig): Response
  34.     {
  35.         $submittedToken = $request->request->get('_token');
  36.         if (!$this->csrfTokenManager->isTokenValid(new CsrfToken('contact_form', $submittedToken))) {
  37.             if ($request->isXmlHttpRequest()) {
  38.                 return new JsonResponse(['success' => false, 'message' => 'Token CSRF no válido.']);
  39.             }
  40.             $this->addFlash('error', 'Token CSRF no válido.');
  41.             return $this->redirectToRoute('Contacto');
  42.         }
  43.         $nombre = $request->request->get('nombre');
  44.         $email = $request->request->get('email');
  45.         $phone = $request->request->get('phone');
  46.         $comments = $request->request->get('comments');
  47.         $htmlContent = $twig->render('contacto/contacto.html.twig', [
  48.             'nombre' => $nombre,
  49.             'email' => $email,
  50.             'phone' => $phone,
  51.             'comments' => $comments,
  52.         ]);
  53.         $emailMessage = (new Email())
  54.             ->from('no-reply@empaquesmatamoros.com')
  55.             ->to('violeta.matamoros@gmail.com')
  56.             ->subject('Nuevo mensaje de contacto')
  57.             ->html($htmlContent);
  58.         $this->mailer->send($emailMessage);
  59.         
  60.         if ($request->isXmlHttpRequest()) {
  61.             return new JsonResponse(['success' => true, 'message' => 'Mensaje enviado correctamente.']);
  62.         }
  63.         // Redirección en caso de solicitud normal (no AJAX)
  64.         $this->addFlash('success', 'Mensaje enviado correctamente.');
  65.         return $this->redirectToRoute('Contacto');
  66.     }
  67. }