<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Twig\Environment;
use Symfony\Component\HttpFoundation\JsonResponse;
class DefaultController extends AbstractController
{
private $mailer;
private $csrfTokenManager;
public function __construct(MailerInterface $mailer, CsrfTokenManagerInterface $csrfTokenManager)
{
$this->mailer = $mailer;
$this->csrfTokenManager = $csrfTokenManager;
}
/**
* @Route("/", name="homepage")
*/
public function index(): Response
{
$csrfToken = $this->csrfTokenManager->getToken('contact_form')->getValue();
return $this->render('index.html.twig', [
'csrf_token' => $csrfToken,
]);
}
#[Route('/Contacto', name: 'Contacto')]
public function contacto(Request $request, Environment $twig): Response
{
$submittedToken = $request->request->get('_token');
if (!$this->csrfTokenManager->isTokenValid(new CsrfToken('contact_form', $submittedToken))) {
if ($request->isXmlHttpRequest()) {
return new JsonResponse(['success' => false, 'message' => 'Token CSRF no válido.']);
}
$this->addFlash('error', 'Token CSRF no válido.');
return $this->redirectToRoute('Contacto');
}
$nombre = $request->request->get('nombre');
$email = $request->request->get('email');
$phone = $request->request->get('phone');
$comments = $request->request->get('comments');
$htmlContent = $twig->render('contacto/contacto.html.twig', [
'nombre' => $nombre,
'email' => $email,
'phone' => $phone,
'comments' => $comments,
]);
$emailMessage = (new Email())
->from('no-reply@empaquesmatamoros.com')
->to('violeta.matamoros@gmail.com')
->subject('Nuevo mensaje de contacto')
->html($htmlContent);
$this->mailer->send($emailMessage);
if ($request->isXmlHttpRequest()) {
return new JsonResponse(['success' => true, 'message' => 'Mensaje enviado correctamente.']);
}
// Redirección en caso de solicitud normal (no AJAX)
$this->addFlash('success', 'Mensaje enviado correctamente.');
return $this->redirectToRoute('Contacto');
}
}