src/Controller/NewsletterSubscriptionController.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\NewsletterSubscription;
  4. use App\Form\NewsletterSubscriptionType;
  5. use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
  6. use Symfony\Component\HttpFoundation\Cookie;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. class NewsletterSubscriptionController extends ResourceController
  11. {
  12.     /**
  13.      * @Route("/_ajax/newsletter/subscribe", name="app_newsletter_subscribe_form", methods={"GET", "POST"})
  14.      */
  15.     public function subscribeAction(Request $request)
  16.     {
  17.         if ($request->cookies->get('newsletter_modal_shown')) {
  18.             return new Response();
  19.         }
  20.         $newsletterSubscription = new NewsletterSubscription();
  21.         $newsletterSubscription->setChannel($this->container->get('sylius.context.channel')->getChannel());
  22.         $form $this->createForm(NewsletterSubscriptionType::class, $newsletterSubscription, [
  23.             'action' => $this->generateUrl('app_newsletter_subscribe_form'),
  24.             'method' => 'POST',
  25.         ]);
  26.         $form->handleRequest($request);
  27.         if ($form->isSubmitted() && $form->isValid()) {
  28.             $this->repository->add($newsletterSubscription);
  29.             $this->setCookie();
  30.             return $this->render('@SyliusShop/Newsletter/success.html.twig');
  31.         }
  32.         return $this->render('@SyliusShop/Newsletter/subscribe.html.twig', [
  33.             'form' => $form->createView(),
  34.         ]);
  35.     }
  36.     private function setCookie()
  37.     {
  38.         $cookie = new Cookie('newsletter_modal_shown'TRUEtime() + 3600 24 365);
  39.         $response = new Response();
  40.         $response->headers->setCookie($cookie);
  41.         $response->sendHeaders();
  42.         return $response;
  43.     }
  44.     /**
  45.      * @Route("/_ajax/newsletter/subscribe/set-cookie", name="app_newsletter_set_cookie", methods={"POST"}, condition="request.isXmlHttpRequest()")
  46.      */
  47.     public function setCookieAction(): Response
  48.     {
  49.         return $this->setCookie();
  50.     }
  51. }