src/Controller/Mvc/ContactController.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Mvc;
  3. use App\Entity\Inquiry\Contact;
  4. use App\Form\Inquiry\ContactType;
  5. use App\Repository\Inquiry\ContactRepository;
  6. use App\Service\InquiryControllerService;
  7. use Psr\Log\LoggerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. /**
  13.  * @Route("/contact")
  14.  */
  15. class ContactController extends AbstractController
  16. {
  17.     use InquiryMockTrait;
  18.     private const SESSION_NAME "contact_resume";
  19.     /**
  20.      * @Route("/", name="contact_index", methods={"GET"})
  21.      */
  22.     public function index(
  23.         Request $request,
  24.         InquiryControllerService $inquiryService
  25.     ): Response {
  26.         $form $inquiryService->prepareForm(
  27.             $request,
  28.             self::SESSION_NAME,
  29.             ContactType::class,
  30.             new Contact()
  31.         );
  32.         return $this->render("pages/contact/index.html.twig", [
  33.             "form" => $form->createView(),
  34.             "retry" => false
  35.         ]);
  36.     }
  37.     /**
  38.      * @Route("/confirm", name="contact_confirm", methods={"POST"})
  39.      */
  40.     public function confirm(
  41.         Request $request,
  42.         InquiryControllerService $inquiryService
  43.     ): Response {
  44.         $Contact = new Contact();
  45.         $form $inquiryService->getSubmittedForm(
  46.             $request,
  47.             ContactType::class,
  48.             $Contact
  49.         );
  50.         if(false === $inquiryService->formValidation($request$form$Contactfalse)) {
  51.             return $this->render("pages/contact/index.html.twig", [
  52.                 "form" => $form->createView(),
  53.                 "retry" => true
  54.             ]);
  55.         }
  56.         return $this->render('pages/contact/confirm.html.twig', [
  57.             "inquiry" => $Contact,
  58.             "form" => $form->createView(),
  59.             "confirmForm" => $inquiryService->saveSession($request$formself::SESSION_NAME)->createView()
  60.         ]);
  61.     }
  62.     /**
  63.      * @Route("/send", name="contact_send", methods={"POST"})
  64.      */
  65.     public function send(
  66.         Request $request,
  67.         InquiryControllerService $inquiryService
  68.     ): Response {
  69.         // confirm csrf
  70.         if(!$inquiryService->handleConfirmForm($request)) {
  71.             return $this->redirectToRoute("contact_index");
  72.         }
  73.         // form data load from session
  74.         $Contact = new Contact();
  75.         if(!$form $inquiryService->loadSessionAndGetForm(
  76.             $request,
  77.             $Contact,
  78.             ContactType::class,
  79.             self::SESSION_NAME
  80.         )) {
  81.             return $this->redirectToRoute('contact_index');
  82.         }
  83.         // validate again
  84.         if(!$inquiryService->formValidation($request$form$Contact)) {
  85.             return $this->render('pages/contact/index.html.twig', [
  86.                 "form" => $form->createView(),
  87.                 "retry" => true,
  88.             ]);
  89.         }
  90.         // persist - sendmail
  91.         $inquiryService
  92.             ->persistAndSessionRemove($request$Contactself::SESSION_NAME)
  93.             ->sendmail($Contact$form)
  94.         ;
  95.         // perdotのような送信がある場合、HTMLをここでレンダリング
  96.         return $this->render('pages/contact/send.html.twig', [
  97.             "inquiry" => $Contact
  98.         ]);
  99.         // goto complete
  100. //        return $this->redirectToRoute('contact_complete');
  101.     }
  102.     /**
  103.      * @Route("/complete", name="contact_complete", methods={"GET", "POST"})
  104.      */
  105.     public function complete(): Response
  106.     {
  107.         return $this->render("pages/contact/complete.html.twig", []);
  108.     }
  109.     /**
  110.      * @Route("/error", name="contact_error", methods={"GET", "POST"})
  111.      */
  112.     public function error(
  113.         Request $request,
  114.         ContactRepository $repository,
  115.         InquiryControllerService $service
  116.     ): Response
  117.     {
  118.         $service->handlePardotError(
  119.             $request,
  120.             $repository,
  121.             ContactType::class,
  122.             self::SESSION_NAME
  123.         )->removeSession($requestself::SESSION_NAME)
  124.         ;
  125.         return $this->redirectToRoute('contact_complete');
  126.     }
  127.     /**
  128.      * @Route("/pardot_mock", name="contact_pardot_mock", methods={"POST"})
  129.      */
  130.     public function pardotMock(Request $requestLoggerInterface $logger) {
  131.         $logger->info('Contact pardot mock. send: 'print_r($request->request->all(), true));
  132.         return $this->redirectToRoute('contact_error');
  133.     }
  134.     /**
  135.      * @Route ("/mock", name="contact_mock")
  136.      */
  137.     public function mock(Request $requestInquiryControllerService $service)
  138.     {
  139.         $Contact = new Contact();
  140.         $this->setCommonMock($Contact)->setMessage('テストメールです')->setSubject('注文住宅');
  141.         $form $this->createForm(ContactType::class, $Contact);
  142.         $service->saveSession($request$formself::SESSION_NAME);
  143.         return $this->redirectToRoute('contact_index');
  144.     }
  145. }