src/Controller/ContactController.php line 64

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Form\ContactType;
  4. use App\Service\APIKiwi;
  5. use JMS\Serializer\SerializerInterface;
  6. use Psr\Log\LoggerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use JMS\Serializer\SerializationContext;
  13. use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
  14. use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. class ContactController extends AbstractController
  17. {
  18.     /**
  19.      * @var APIKiwi
  20.      */
  21.     private APIKiwi $APIKiwi;
  22.     /**
  23.      * @var SerializerInterface
  24.      */
  25.     private SerializerInterface $serializer;
  26.     /**
  27.      * @var LoggerInterface
  28.      */
  29.     private LoggerInterface $logger;
  30.     /**
  31.      * @var TranslatorInterface
  32.      */
  33.     private TranslatorInterface $translator;
  34.     /**
  35.      * ContactController constructor.
  36.      * @param APIKiwi $APIKiwi
  37.      * @param SerializerInterface $serializer
  38.      * @param LoggerInterface $logger
  39.      * @param TranslatorInterface $translator
  40.      */
  41.     public function __construct(
  42.         APIKiwi $APIKiwi,
  43.         SerializerInterface $serializer,
  44.         LoggerInterface $logger,
  45.         TranslatorInterface $translator
  46.     )
  47.     {
  48.         $this->APIKiwi $APIKiwi;
  49.         $this->serializer $serializer;
  50.         $this->logger $logger;
  51.         $this->translator $translator;
  52.     }
  53.     /**
  54.      * @Route("/contact", name="kiwi_contact")
  55.      * @param Request $request
  56.      * @return RedirectResponse|Response
  57.      * @throws TransportExceptionInterface
  58.      */
  59.     public function index(Request $request)
  60.     {
  61.         $form $this->createForm(ContactType::class);
  62.         $form->handleRequest($request);
  63.         if ($form->isSubmitted() && $form->isValid()) {
  64.             $contact $this->serializer->serialize(
  65.                 $form->getData(),
  66.                 'json',
  67.                 SerializationContext::create()->setGroups(
  68.                     ['contact']
  69.                 )
  70.             );
  71.             try {
  72.                 $response $this->APIKiwi->postPublic($contact'contacts');
  73.                 $response->getContent();
  74.                 $this->addFlash('success'$this->translator->trans("default.contact_form.sent", [], "messages"));
  75.                 return $this->redirectToRoute('kiwi_homepage');
  76.             } catch (ClientExceptionInterface $e) {
  77.                 $content json_decode($response->getContent(false), true);
  78.                 if( isset($content['@type']) && $content['@type'] === 'ConstraintViolationList' && isset($content['violations'])) {
  79.                     foreach ($content['violations'] as $violation) {
  80.                         $this->addFlash(
  81.                             'warning',
  82.                             sprintf("%s : %s",
  83.                                 $this->translator->trans(sprintf('api.validation.properties.%s'$violation['propertyPath']), [], 'api'),
  84.                                 $this->translator->trans(sprintf('api.validation.codes.%s'$violation['code']), [], 'api')
  85.                             )
  86.                         );
  87.                     }
  88.                 } else {
  89.                     $this->logger->error(sprintf("%s : %s"'ClientException'$e->getMessage()), $e->getTrace());
  90.                     $this->addFlash('warning'$this->translator->trans("api.validation.errors.generic", [], "api"));
  91.                 }
  92.             } catch (\Exception $e) {
  93.                 $this->logger->error(sprintf("%s : %s"get_class($e),$e->getMessage()), $e->getTrace());
  94.                 $this->addFlash('warning'$this->translator->trans("api.validation.errors.generic", [], "api"));
  95.             }
  96.         }
  97.         return $this->render('contact/contact.html.twig', [
  98.             'form' => $form->createView(),
  99.         ]);
  100.     }
  101. }