src/Controller/ContactController.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Contact;
  4. use App\Form\ContactType;
  5. use App\Repository\ContactRepository;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. use Symfony\Component\Mime\Email;
  13. use Symfony\Component\HtmlSanitizer\HtmlSanitizer;
  14. use Symfony\Component\HtmlSanitizer\HtmlSanitizerConfig;
  15. #[Route('/contact')]
  16. class ContactController extends AbstractController
  17. {
  18.     private function getClientIp(): string {
  19.         $ip '';
  20.         if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  21.             $ip $_SERVER['HTTP_CLIENT_IP'];
  22.         } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  23.             $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
  24.         } else {
  25.             $ip $_SERVER['REMOTE_ADDR'];
  26.         }
  27.         return $ip;
  28.     }
  29.     #[Route('/all'name'app_contact_index'methods: ['GET'])]
  30.     public function index(ContactRepository $contactRepository): Response
  31.     {
  32.         return $this->render('contact/index.html.twig', [
  33.             'contacts' => $contactRepository->findAll(),
  34.         ]);
  35.     }
  36.     #[Route('/'name'app_contact_new'methods: ['GET''POST'])]
  37.     public function new(Request $requestEntityManagerInterface $entityManagerMailerInterface $mailer): Response
  38.     {
  39.         $contact = new Contact();
  40.         $form $this->createForm(ContactType::class, $contact);
  41.         $form->handleRequest($request);
  42.         $ip $this->getClientIp();
  43.         $htmlSanitizer = new HtmlSanitizer(
  44.             (new HtmlSanitizerConfig())->allowSafeElements()
  45.         );
  46.         $contact->setIpAddress($ip);
  47.         if ($form->isSubmitted() && $form->isValid()) {
  48.             $message $htmlSanitizer->sanitize($form['message']->getData());
  49.             $contact->setMessage($message);
  50.             $entityManager->persist($contact);
  51.             $entityManager->flush();
  52.             $name $htmlSanitizer->sanitize($form['name']->getData());
  53.             $surname $htmlSanitizer->sanitize($form['surname']->getData());
  54.             $email $htmlSanitizer->sanitize($form['email']->getData());
  55.             $email = (new Email())
  56.                 ->from('mailtrap@demomailtrap.com')
  57.                 ->to('bydunok.za.zugarok@gmail.com'// Primary recipient
  58.                 ->subject('в Арці ворота')
  59.                 ->text("$name $surname пише: $message. Зворотній email: $email. IP адреса: $ip");
  60.             try {
  61.                 $mailer->send($email);
  62.             } catch (TransportExceptionInterface $e) {
  63.                 // some error prevented the email sending; display an
  64.                 // error message or try to resend the message
  65.                 var_dump("error"$e);
  66.                 die();
  67.             }
  68.             return $this->renderForm('default/contact_received.html.twig');
  69.         }
  70.         return $this->renderForm('contact/new.html.twig', [
  71.             'contact' => $contact,
  72.             'form' => $form,
  73.         ]);
  74.     }
  75.     #[Route('/{id}'name'app_contact_show'methods: ['GET'])]
  76.     public function show(Contact $contact): Response
  77.     {
  78.         return $this->render('contact/show.html.twig', [
  79.             'contact' => $contact,
  80.         ]);
  81.     }
  82.     #[Route('/{id}/edit'name'app_contact_edit'methods: ['GET''POST'])]
  83.     public function edit(Request $requestContact $contactEntityManagerInterface $entityManager): Response
  84.     {
  85.         $form $this->createForm(ContactType::class, $contact);
  86.         $form->handleRequest($request);
  87.         if ($form->isSubmitted() && $form->isValid()) {
  88.             $entityManager->flush();
  89.             return $this->redirectToRoute('app_contact_index', [], Response::HTTP_SEE_OTHER);
  90.         }
  91.         return $this->renderForm('contact/edit.html.twig', [
  92.             'contact' => $contact,
  93.             'form' => $form,
  94.         ]);
  95.     }
  96.     #[Route('/{id}'name'app_contact_delete'methods: ['POST'])]
  97.     public function delete(Request $requestContact $contactEntityManagerInterface $entityManager): Response
  98.     {
  99.         if ($this->isCsrfTokenValid('delete'.$contact->getId(), $request->request->get('_token'))) {
  100.             $entityManager->remove($contact);
  101.             $entityManager->flush();
  102.         }
  103.         return $this->redirectToRoute('app_contact_index', [], Response::HTTP_SEE_OTHER);
  104.     }
  105. }