src/Controller/RegistrationController.php line 30
<?phpnamespace App\Controller;use App\Entity\Setting;use App\Entity\User;use App\Entity\UserProject;use App\Form\RegistrationFormType;use App\Repository\UserRepository;use App\Security\EmailVerifier;use App\Service\BillingService;use Doctrine\ORM\EntityManagerInterface;use Doctrine\Persistence\ManagerRegistry;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\Form\FormInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Mime\Address;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Contracts\Translation\TranslatorInterface;use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;class RegistrationController extends AbstractController{public function __construct(private readonly ManagerRegistry $doctrine, private EmailVerifier $emailVerifier) {}#[Route('/register', name: 'app_register')]public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, BillingService $billingService): Response{if ($this->getUser()) {return $this->redirectToRoute('app_user_platforms');}$user = new User();$form = $this->createForm(RegistrationFormType::class, $user);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {// encode the plain password$user->setPassword($userPasswordHasher->hashPassword($user,$form->get('plainPassword')->getData()));$user->setRoles(['ROLE_USER']);$user->setBalance(0);$entityManager->persist($user);$userProject = new UserProject();$userProject->setName($this->doctrine->getRepository(Setting::class)->get('default_project_name') ?? 'Личныйй');$userProject->setUser($user);$userProject->setIsMain(true);$entityManager->persist($userProject);$entityManager->flush();// Add a bonustry {$billingService->updateUserBalance($user, 'bonus_registration', $this->doctrine->getRepository(Setting::class)->get('default_balance') ?? 0, $userProject);} catch (Exception $exception) {//todo log//$exception->getMessage();}// generate a signed url and email it to the user$this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,(new TemplatedEmail())->from(new Address('my@eresh.space', 'noreply@ze.media'))->to($user->getEmail())->subject('Подтвердите свой E-mail адрес')->htmlTemplate('registration/confirmation_email.html.twig'));// do anything else you need here, like send an emailreturn $this->redirectToRoute('app_login');}return $this->render('register/index.html.twig', ['registrationForm' => $form->createView(),]);}#[Route('/verify/email', name: 'app_verify_email')]public function verifyUserEmail(Request $request, TranslatorInterface $translator, UserRepository $userRepository): Response{$id = $request->get('id');if (null === $id) {return $this->redirectToRoute('app_register');}$user = $userRepository->find($id);if (null === $user) {return $this->redirectToRoute('app_register');}// validate email confirmation link, sets User::isVerified=true and persiststry {$this->emailVerifier->handleEmailConfirmation($request, $user);} catch (VerifyEmailExceptionInterface $exception) {$this->addFlash('verify_email_error', $translator->trans($exception->getReason(), [], 'VerifyEmailBundle'));return $this->redirectToRoute('app_register');}// @TODO Change the redirect on success and handle or remove the flash message in your templates$this->addFlash('success', 'Your email address has been verified.');return $this->redirectToRoute('app_login');}private function getErrorsFromForm(FormInterface $form){$errors = array();foreach ($form->getErrors() as $error) {$errors[] = $error->getMessage();}foreach ($form->all() as $childForm) {if ($childForm instanceof FormInterface) {if ($childErrors = $this->getErrorsFromForm($childForm)) {$errors[$childForm->getName()] = $childErrors;}}}return $errors;}}