src/Controller/AccountRegistrationController.php line 30

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by simpson <simpsonwork@gmail.com>
  4.  * Date: 2019-07-16
  5.  * Time: 14:33
  6.  */
  7. namespace App\Controller;
  8. use App\Entity\Account\Advertiser;
  9. use App\Entity\Account\Customer;
  10. use App\Entity\Location\City;
  11. use App\Entity\User;
  12. use App\Form\RegisterAccountForm;
  13. use App\Security\LoginFormAuthenticator;
  14. use App\Service\DefaultCityProvider;
  15. use App\Service\Features;
  16. use App\Service\UserService;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  23. class AccountRegistrationController extends AbstractController
  24. {
  25.     #[Route(path'/reg/'name'app_security_register'methods: ['GET''POST'])]
  26.     #[ParamConverter('city'converter'city_converter')]
  27.     public function register(UserService $userServiceCity $cityRequest $requestFeatures $featuresDefaultCityProvider $defaultCityProvider): Response
  28.     {
  29.         //$isCustomerRegister = $request->attributes->get('_route') == 'register_customer';
  30.         /** @var User $user */
  31.         $user null;
  32.         if ($request->isMethod('POST')) {
  33.             $formData $request->request->get('register_account_form');
  34.             switch ($formData['accountType'] ?? null) {
  35.                 case 'advertiser':
  36.                     $user = new Advertiser();
  37.                     break;
  38.                 case 'customer':
  39.                     $user = new Customer();
  40.                     break;
  41.                 default:
  42.                     throw new \LogicException('Unknown user type');
  43.             }
  44.         }
  45.         $form $this->createForm(RegisterAccountForm::class, $user, [
  46.             'use_captcha' => $features->use_sign_up_captcha(),
  47.         ]);
  48.         $form->handleRequest($request);
  49.         if ($form->isSubmitted() && $form->isValid()) {
  50.             $user $form->getData();
  51.             $userService->save($user);
  52.             return $this->render('security/register_send.html.twig');
  53.         }
  54.         return $this->render('security/register.html.twig', ['form' => $form->createView(), 'city' => $city]);
  55.     }
  56.     #[Route(path'/reg/{id}/{code}/'name'email_confirmation'requirements: ['id' => '\d+''code' => '\d+'])]
  57.     #[Route(path'/reg/customer/{id}/{code}/'name'email_confirmation.customer'requirements: ['id' => '\d+''code' => '\d+'])]
  58.     public function confirmEmail(
  59.         LoginFormAuthenticator $authenticator,
  60.         GuardAuthenticatorHandler $guardHandler,
  61.         Request $request,
  62.         UserService $userService,
  63.         string $id,
  64.         string $code
  65.     ): Response|null {
  66.         /** @var User $user */
  67.         $user $userService->findUserByIdAndConfirmationCode((int)$id$code);
  68.         if ($user === null) {
  69.             return new Response(Response::HTTP_NOT_FOUND);
  70.         }
  71.         $userService->enable($user);
  72.         return $guardHandler->authenticateUserAndHandleSuccess($user$request$authenticator'main');
  73.     }
  74. }