src/Controller/FormController.php line 160

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Antony Tkachenko <at@canaryknight.ru>
  4.  */
  5. namespace App\Controller;
  6. use App\Event\UtmSubscriber;
  7. use App\Form\Dto\BlogFeedback;
  8. use App\Form\Dto\Registration;
  9. use App\Exception\ValidationException;
  10. use App\Form\Dto\RegistrationConsultation;
  11. use App\Form\Dto\RegistrationInfo;
  12. use App\Form\Dto\WalletDemo;
  13. use App\Form\FormHandler;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. /**
  19.  * @Route("/form", name="form_", methods={"POST"}, defaults={"_format": "json"})
  20.  */
  21. class FormController extends AbstractController
  22. {
  23.     private $gmbBaseHost;
  24.     /** @var FormHandler */
  25.     private $formHandler;
  26.     public function __construct(
  27.         string $gmbBaseHost,
  28.         FormHandler $formHandler
  29.     ) {
  30.         $this->gmbBaseHost $gmbBaseHost;
  31.         $this->formHandler $formHandler;
  32.     }
  33.     private function getData(Request $request)
  34.     {
  35.         $data $request->request->all();
  36.         if (empty($data)) {
  37.             try {
  38.                 $data $request->toArray();
  39.             } catch (\Throwable $e) {
  40.                 $data = [];
  41.             }
  42.         }
  43.         return $data;
  44.     }
  45.     /**
  46.      * @Route("/registration", name="registration")
  47.      */
  48.     public function registration(Request $request)
  49.     {
  50.         try {
  51.             $dto $this->formHandler->handle(Registration::class, $this->getData($request), $request->attributes->get(UtmSubscriber::UTM_COOKIE_NAME));
  52.         } catch (ValidationException $e) {
  53.             return $this->json([
  54.                 'success' => false,
  55.                 'error' => 'Исправьте ошибки',
  56.                 'validation' => $e->getErrorList(),
  57.             ]);
  58.         } catch (\Throwable $e) {
  59.             return $this->json([
  60.                 'success' => false,
  61.                 'error' => $e->getMessage() . 'Неизвестная ошибка',
  62.             ]);
  63.         }
  64.         /** @var $dto Registration::class */
  65.         return $this->json([
  66.             'success' => true,
  67.             'data' => [
  68.                 'host' => "https://{$dto->org}.{$this->gmbBaseHost}",
  69.                 'login' => 'admin',
  70.                 'password' => $dto->password,
  71.             ],
  72.         ]);
  73.     }
  74.     /**
  75.      * @Route("/registration/info", name="registration_info")
  76.      */
  77.     public function registrationInfo(Request $request)
  78.     {
  79.         try {
  80.             $this->formHandler->handle(RegistrationInfo::class, $this->getData($request), $request->attributes->get(UtmSubscriber::UTM_COOKIE_NAME));
  81.         } catch (ValidationException $e) {
  82.             return $this->json([
  83.                 'success' => false,
  84.                 'error' => 'Исправьте ошибки',
  85.                 'validation' => $e->getErrorList(),
  86.             ]);
  87.         } catch (\Throwable $e) {
  88.             return $this->json([
  89.                 'success' => false,
  90.                 'error' => 'Неизвестная ошибка',
  91.             ]);
  92.         }
  93.         return $this->json([
  94.             'success' => true,
  95.         ]);
  96.     }
  97.     /**
  98.      * @Route("/registration/consultation", name="registration_consultation")
  99.      */
  100.     public function registrationConsultation(Request $request)
  101.     {
  102.         try {
  103.             $this->formHandler->handle(RegistrationConsultation::class, $this->getData($request), $request->attributes->get(UtmSubscriber::UTM_COOKIE_NAME));
  104.         } catch (ValidationException $e) {
  105.             return $this->json([
  106.                 'success' => false,
  107.                 'error' => 'Исправьте ошибки',
  108.                 'validation' => $e->getErrorList(),
  109.             ]);
  110.         } catch (\Throwable $e) {
  111.             return $this->json([
  112.                 'success' => false,
  113.                 'error' => 'Неизвестная ошибка',
  114.             ]);
  115.         }
  116.         return $this->json([
  117.             'success' => true,
  118.         ]);
  119.     }
  120.     /**
  121.      * @Route("/wallet/demo", name="wallet_demo")
  122.      */
  123.     public function walletDemo(Request $request): JsonResponse
  124.     {
  125.         try {
  126.             $this->formHandler->handle(WalletDemo::class, $this->getData($request), $request->attributes->get(UtmSubscriber::UTM_COOKIE_NAME));
  127.         } catch (ValidationException $e) {
  128.             return $this->json([
  129.                 'success' => false,
  130.                 'error' => 'Ошибка',
  131.                 'validation' => $e->getErrorList(),
  132.             ]);
  133.         } catch (\Throwable $e) {
  134.             return $this->json([
  135.                 'success' => false,
  136.                 'error' => 'Неизвестная ошибка',
  137.             ]);
  138.         }
  139.         return $this->json([
  140.             'success' => true,
  141.         ]);
  142.     }
  143.     /**
  144.      * @Route("/blog-feedback", name="blog_feedback")
  145.      */
  146.     public function blogFeedback(Request $request)
  147.     {
  148.         try {
  149.             $this->formHandler->handle(BlogFeedback::class, $this->getData($request), $request->attributes->get(UtmSubscriber::UTM_COOKIE_NAME));
  150.         } catch (ValidationException $e) {
  151.             return $this->json([
  152.                 'success' => false,
  153.                 'error' => 'Ошибка',
  154.                 'validation' => $e->getErrorList(),
  155.             ]);
  156.         } catch (\Throwable $e) {
  157.             return $this->json([
  158.                 'success' => false,
  159.                 'error' => 'Неизвестная ошибка',
  160.             ]);
  161.         }
  162.         return $this->json([
  163.             'success' => true,
  164.         ]);
  165.     }
  166. }