src/Controller/LoginFormController.php line 498

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use MangoPay\MangoPayApi;
  5. use App\Entity\ImageProfil;
  6. use App\Entity\UserAccount;
  7. use App\Form\ImageprofilType;
  8. use App\Repository\UserRepository;
  9. use Symfony\Bundle\MakerBundle\Str;
  10. use Symfony\Component\Asset\Package;
  11. use App\Service\Payment\StripeService;
  12. use App\Service\Payment\MangopayService;
  13. use App\Repository\AccountFormRepository;
  14. use App\Repository\UserAccountRepository;
  15. use App\Repository\OrdersRepository;
  16. use App\Repository\OffersRepository;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Doctrine\Common\Collections\ArrayCollection;
  21. use Symfony\Component\HttpFoundation\RedirectResponse;
  22. use Symfony\Component\Form\Extension\Core\Type\DateType;
  23. use Symfony\Component\Form\Extension\Core\Type\TextType;
  24. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  25. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  26. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  27. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  28. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  29. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  30. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  31. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  32. use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
  33. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  34. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  35. use Symfony\Component\Uid\Uuid;
  36. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  37. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  38. use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
  39. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
  40. use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\IsTrue as RecaptchaTrue;
  41. class LoginFormController extends AbstractController
  42. {
  43.     use TargetPathTrait;
  44.     private $passwordEncoder;
  45.      public function __construct(UserPasswordEncoderInterface $passwordEncoder)
  46.      {
  47.          $this->passwordEncoder $passwordEncoder;
  48.      }
  49.     public function load($pass$User)
  50.     {
  51.         
  52.         $User->setPassword($this->passwordEncoder->encodePassword(
  53.             $User,
  54.              $pass
  55.          ))->getPassword();
  56.     }
  57.     
  58. /**
  59.  *@Route("/register", name="user.register")
  60.  */
  61. public function register(Request $requestUserRepository $UserRepository, \Swift_Mailer $mailerStripeService $stripeService)
  62. {
  63.     if (!$this->getUser() && $this->getUser() === null)
  64.     {
  65.         $userRegistered false;
  66.         $LoginForm = new User();
  67.         $UserAccount = new UserAccount();
  68.        // $request->request->get()
  69.         $LoginForm->setUserAccount($UserAccount);
  70.         $form $this->createFormBuilder($LoginForm)
  71.             ->add('lastname'TextType::class, ['label'=>'Votre Nom'])
  72.             ->add('firstname'TextType::class, ['label'=> 'Votre prénom'])
  73.             ->add('phone'TextType::class, ['label'=> 'Numéro de téléphone'])
  74.             ->add('email'TextType::class, ['label'=> 'Votre adresse mail''attr'=> ['name'=>'_username']])
  75.          
  76.             //->add('password', PasswordType::class, ['label'=> 'Mot de passe','attr' => ['password' => '_password']])
  77.             //->add('passwordConfirm', PasswordType::class, ['label'=> 'Confirmer votre mot de passe','attr' => ['password' => '_password'],'mapped' => false])
  78.             ->add('plainPassword'RepeatedType::class, [
  79.                 'type' => PasswordType::class,
  80.                 'first_options'  => ['label' => 'Mot de passe'],
  81.                 'second_options' => ['label' => 'Confirmez le mot de passe'],
  82.                 'invalid_message' => 'Les mots de passe doivent correspondre.',
  83.                 'mapped' => false,
  84.                 'required' => true,
  85.             ])
  86.             ->add('terms'CheckboxType::class, [
  87.                 'label' => 'J\'accepte les conditions générales d\'utilisation',
  88.                 'mapped' => false,
  89.                 'required' => true,
  90.             ])
  91.             ->add('privacy'CheckboxType::class, [
  92.                 'label' => 'J\'accepte la politique de confidentialité',
  93.                 'mapped' => false,
  94.                 'required' => true,
  95.             ])
  96.             ->add('recaptcha'EWZRecaptchaType::class, [
  97.                 'label' => false,
  98.                 'mapped' => false,
  99.                 'constraints' => [
  100.                     new RecaptchaTrue(['message' => 'Veuillez confirmer que vous n\'êtes pas un robot']),
  101.                 ],
  102.             ])
  103.             ->add('inscription'SubmitType::class, ['label' => 'S\' inscrire'])
  104.             ->getForm();
  105.             //$pass =  $form['password']->getData();
  106.            // dump($form['password']);
  107.              $form->handleRequest($request);
  108.     }   
  109.         else
  110.     {
  111.             $user $this->getUser();
  112.            // if ($user->getUserAccount() &&  $user->getUserAccount() !== null)
  113.             //{
  114.                 $userRegistered true;
  115.                 $LoginForm null;
  116.                 $user $user->setUserAccount($user->getUserAccount());
  117.                 $form $this->createFormBuilder($user, ['validation_groups' => [false]])
  118.                     ->add('lastname'TextType::class, ['label'=>'Votre Nom'])
  119.                     ->add('firstname'TextType::class, ['label'=> 'Votre prénom'])
  120.                     ->add('email'TextType::class, ['label'=> 'Votre adresse mail''attr'=> ['name'=>'_username']])
  121.                     ->add('phone'TextType::class, ['label'=> 'Numéro de téléphone'])
  122.                     ->add('submit'SubmitType::class, ['label' => 'Valider'])
  123.                     ->getForm();
  124.              $form->handleRequest($request);
  125.           //  }
  126.         }
  127.         if ($form->isSubmitted() && $form->isValid()  )
  128.        {
  129.             $this->addFlash('modified''Vos informations ont été modifiées avec succès');
  130.            if($LoginForm !== null && isset($LoginForm))
  131.            {
  132.                 $plainPassword $form->get('plainPassword')->getData();
  133.                $this->load($plainPassword $LoginForm);
  134.                $user $form->getData();
  135.                $user->setVerificationToken(bin2hex(random_bytes(32))); // 64 characters
  136.                //$mangopayUserNatural= $mangopayService->createMangoUserNatural($user);
  137.                // $user->setUserMangopayIdNatural($mangopayUserNatural->Id);
  138.                 $email $user->getEmail();
  139.                 $customer $stripeService->createStripeCustomer($email$user->getFirstname());
  140.                 $user->setCustomerStripeId($customer->id);
  141.                 $EntityManager $this->getDoctrine()->getManager();
  142.                 $EntityManager->persist($user);
  143.                 $EntityManager->persist($UserAccount);
  144.                 $EntityManager->flush();
  145.                 $this->addFlash('success''Félicitations votre compte a été créé, un mail de bienvenue avec un lien de vérification vous a été envoyé. Rendez-vous sur le lien pour valider votre compte.');
  146.                 $logger = new \Swift_Plugins_Loggers_ArrayLogger;
  147.                 $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
  148.                 $message = (new \Swift_Message())  
  149.                     ->setSubject('Jobingwada : confirmation de votre inscription'
  150.                     ->setFrom(['contact@jobingwada.fr' => 'Jobingwada'])
  151.                     ->setTo("{$email}")
  152.                     ->setBody$this->renderView'welcome.html.twig',
  153.                         [
  154.                             'user' => $user,
  155.                             'token' => $user->getVerificationToken(),
  156.                         ]
  157.                         ),
  158.                         'text/html' 
  159.                     );
  160.                 $numSent $mailer->send($message);
  161.                 
  162.                 return $this->redirectToRoute('security.login', ['username_given' => $user->getEmail() ]);
  163.             } 
  164.                 else 
  165.             {
  166.                 $user $form->getData();
  167.                 $EntityManager $this->getDoctrine()->getManager();
  168.                 $EntityManager->persist($user);
  169.                 $EntityManager->flush();
  170.                 return $this->redirectToRoute('profil.user');
  171.             }
  172.         }
  173.   
  174.         if($this->getUser() !== null)
  175.         {
  176.             return $this->render('account.user.html.twig', [
  177.                 'form' => $form->createView(),
  178.             ]);
  179.         } 
  180.             else
  181.         {
  182.             return $this->render('login.html.twig', [
  183.                 'formLogin' => $form->createView(),
  184.                 ]);
  185.         }
  186. }
  187. /**
  188.  * @Route("/verify-token/{token}", name="user_verify")
  189.  */
  190. public function verify(string $tokenUserRepository $userRepo)
  191. {
  192.     $user $userRepo->findOneBy(['verificationToken' => $token]);
  193.     $em $this->getDoctrine()->getManager();
  194.     if (!$user) {
  195.         throw $this->createNotFoundException('Invalid token.');
  196.     }
  197.     $user->setIsVerified(true);
  198.     //$user->setVerificationToken(null); // optional: clear the token
  199.     $em->flush();
  200.     // Redirect or show success page
  201.     return $this->redirectToRoute('home', [
  202.         'message' => 'Your account has been verified successfully.'
  203.     ]);
  204. }
  205. /**
  206.  * @Route("/reset-password/{id}/{changePassword}", name="reset.password")
  207.  */
  208. public function resetPassword(Request $requestUserRepository $UserRepository$idSessionInterface $session$changePassword=false )
  209. {
  210.     $user = new User();
  211.     $userCurrent $this->getUser();
  212.     $resetPasswordToken $request->query->get('tokenForgotPassword');
  213.     $tokenSession $session->get('tokenForgotPassword');
  214.     $changePasswordSession $session->get('changePassword');
  215.     if($changePassword === "changePassword" )
  216.     {
  217.         $session->set('changePassword''passwordChanged');
  218.     }
  219.     if( $userCurrent !== null && $userCurrent->getId() == $id  && $changePasswordSession !== "changePassword")
  220.     {
  221.         return $this->redirectToRoute('home');
  222.     } 
  223.     
  224.     /*if($resetPasswordToken === $tokenSession)
  225.     {
  226.         return $this->redirectToRoute('home');
  227.     }*/
  228.     $user $UserRepository->find($id);
  229.     $LoginForm $this->createFormBuilder($user, ['attr' => ['class'=>'text-center']])
  230.         ->add('password'RepeatedType::class, [
  231.             'label' => false,
  232.             'type' => PasswordType::class,
  233.             'invalid_message' => 'Les champs du mot de passe doivent correspondre.',
  234.             'options' => ['attr' => ['password' => '_password' 'class' => 'text-center' ]],
  235.             'required' => true,
  236.             'first_options' => ['label' => 'Nouveau mot de passe''attr' => ['class' => 'mx-auto']],
  237.             'second_options' => ['label' => 'Confirmer votre mot de passe' 'attr' => ['class' => 'mx-auto']],
  238.             ])
  239.         ->add('submit'SubmitType::class, ['label' => 'Valider'])
  240.         ->getForm();
  241.     
  242.     $LoginForm->handleRequest($request);
  243.     if($LoginForm->isSubmitted() && $LoginForm->isValid() && $tokenSession === $resetPasswordToken)
  244.     {
  245.         $this->addFlash('success''Votre mot de passe a été modifié, veuillez vous connecter avec le nouveau mot de passe');    
  246.         $this->load($LoginForm->getData()->getPassword(), $user);
  247.         $EntityManager $this->getDoctrine()->getManager();
  248.         $EntityManager->persist($user);
  249.         $EntityManager->flush();           
  250.         return $this->redirectToRoute('security.login');
  251.     }
  252.     
  253.     return $this->render('login.reset.html.twig', [
  254.         'formResetLogin' => $LoginForm->createView()
  255.     ]);
  256. }
  257. /**
  258.  * @Route("/password-forgot", name="password.forgot")
  259.  */
  260. public function PasswordForgot(Request $requestUserRepository $userRepositorySessionInterface $session, \Swift_Mailer $mailer )
  261. {
  262.     $form $this->createFormBuilder()
  263.             ->add('email'EmailType::class, ['label' => 'Veuillez entrer votre adresse mail'])
  264.             ->add('submit'SubmitType::class, ['label' => 'envoyer'])
  265.             ->getForm();
  266.     $form->handleRequest($request);
  267.     $idFounded false;
  268.     
  269.     if( $form->isSubmitted() && $form->isValid() )
  270.     {
  271.         $data $form->getData();
  272.         $email $data['email'];
  273.         $user $userRepository->findOneBy(['email' => $email]);
  274.         if($user !== null && $email !== null )
  275.         {
  276.             try{
  277.                 $numberRand random_int(0999999999);
  278.                 $email $user->getEmail();
  279.                 $id $user->getId();
  280.                 $token crypt($email'$6$rounds=5000$burnbabyloneandratrace{$numberRand}' );
  281.                 $session->set('tokenForgotPassword'$token);
  282.                 $session->set('tokenForgotId'$id);
  283.                     $logger = new \Swift_Plugins_Loggers_ArrayLogger;
  284.                     $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
  285.                     $message = (new \Swift_Message())  
  286.                         ->setSubject('Munngano : mot de passe oublié'
  287.                         ->setFrom(['contact@munngano.com' => 'Munngano'])
  288.                         //->setTo("{$email}")
  289.                         ->setTo("{$email}")
  290.                         ->setBody$this->renderView'password.forgot.html.twig',
  291.                             ['tokenForgotPassword' => $token'user' => $user]
  292.                         ),
  293.                             'text/html' 
  294.                     );
  295.                     $numSent $mailer->send($message);
  296.                     $this->addFlash('success''Nous vous avons envoyer un lien de renouvellement de mot de passe par mail');
  297.                     $idFounded true;
  298.             } catch(\Swift_TransportException $e){
  299.                 dump('error :'.$e);
  300.             }
  301.         } 
  302.         else
  303.             {
  304.                 $this->addFlash('warning''Nous n\' avons pas trouver d\' utilisteur enregistré avec cet identifiant');
  305.                 $idFounded false;                         
  306.             }
  307.     
  308.     }
  309.         
  310.     //}
  311.   //  $email = $request->query->get('email');
  312.     return $this->render('password.forgot.request.html.twig', ['form' => $form->createView(), 'idFounded' => $idFounded]);
  313. }
  314. /**
  315.  *@Route("/register/edit/{lastname}/{firstname}/{id}", name="user.edit.register")
  316.  */
  317. public function registerEdit(Request $request$id,$lastnameUserRepository $UserRepositoryUser $userMangopayService $mangopayServiceUserAccountRepository $userAccountRepository )
  318. {
  319.         $this->denyAccessUnlessGranted('ROLE_USER');
  320.         $UserFetch $UserRepository->findOneBy(['id'=>$id'lastname'=>$lastname]);
  321.         // set image profil
  322.         if ( $UserFetch->getImageProfil() !== null)
  323.         {
  324.             $imageProfilUrl $UserFetch->getImageProfil()->getUrlImage();
  325.             $imageProfil $UserFetch->getImageProfil();
  326.             
  327.         } 
  328.             else
  329.         {
  330.             $imageProfilUrl "https://via.placeholder.com/200";
  331.             $imageProfil = new ImageProfil();
  332.         } 
  333.             $formImageProfilFetch $this->createForm(ImageprofilType::class,$imageProfil);
  334.          //   $UserFetch->getImageProfil()->setImage();
  335.             $formImageProfilFetch->handleRequest($request);
  336.         // set user account
  337.         if( $UserFetch->getUserAccount() === null )
  338.         {
  339.             $UserAccount = new UserAccount();
  340.         } 
  341.         else
  342.         {
  343.             $UserAccount $UserFetch->getUserAccount();
  344.         }
  345.         $UserAccount->setUser($UserFetch);
  346.         $form $this->createFormBuilder($UserAccount)
  347.            
  348.             ->add('adress'TextType::class, ['label' => 'Adresse',
  349.                 'attr' => ['placeholder' => 'Adresse''id' => 'account_form_adresse']
  350.             ])
  351.             ->add('postalCode'TextType::class, [
  352.                 'attr' => ['placeholder' => 'Code postal']
  353.             ])
  354.             ->add('city'TextType::class, [
  355.                 'attr' => ['placeholder' => 'Ville'
  356.             ])
  357.             ->add('phone'TextType::class, [
  358.                 'attr' => ['placeholder' => 'Numéro de téléphone']
  359.             ])
  360.             ->add('inscription'SubmitType::class, ['label' => 'Mettre à jour vos coordonnées''attr' => ['class'=>'btn btn-primary col-sm-12']])
  361.             ->getForm();
  362.             //$pass =  $form['password']->getData();
  363.            // dump($form['password']);
  364.             $form->handleRequest($request);
  365.             
  366.          // form image profil submission
  367.          if ($formImageProfilFetch->isSubmitted() && $formImageProfilFetch->isValid())
  368.             {
  369.                 $image $formImageProfilFetch->getData();
  370.                 $EntityManager $this->getDoctrine()->getManager();
  371.                 //$UserFetch = $UserFetch->setImageProfil($imageProfil);
  372.                 $image $image->setUser($UserFetch);
  373.                 $userId $UserFetch->getEmail();
  374.                 //$EntityManager->persist($UserFetch);
  375.                 $EntityManager->persist($image);
  376.                 $EntityManager->flush();
  377.                 if(!is_dir(dirname(__DIR__2)."/public_html/images/profils/{$userId}"))
  378.             {
  379.               
  380.               mkdirdirname(__DIR__2)."/public_html/images/profils/{$userId}");
  381.             }
  382.             //}
  383.              
  384.             
  385.             /* rename the files with the profil path */
  386.             if(!file_exists(dirname(__DIR__2)."/public_html/images/profils/{$userId}/{$image->getUrlImage()}"))
  387.             {
  388.               @rename(dirname(__DIR__2)."/public_html/images/profils/{$image->getUrlImage()}"dirname(__DIR__2)."/public_html/images/profils/{$userId}/{$image->getUrlImage()}");
  389.             } 
  390.                 $path_file dirname(__DIR__2)."/public_html/images/profils/{$userId}/{$image->getUrlImage()}";
  391.             }
  392.          // form user account submission
  393.             if ($form->isSubmitted() && $form->isValid())
  394.             {
  395.                 $user $form->getData();
  396.                // $mangopayService->createMangoUserNatural($UserFetch);
  397.                 $EntityManager $this->getDoctrine()->getManager();
  398.                 $EntityManager->persist($user);
  399.                 $EntityManager->flush();
  400.                 $this->addFlash('success''Vos coordonnées ont été mises à jour');
  401.                 return $this->redirectToRoute('profil.user');
  402.             }
  403.         return $this->render('login2.html.twig', [
  404.             'formLogin2' => $form->createView(),
  405.             'formImageProfilFetch' => $formImageProfilFetch->createView(),
  406.             'imageProfilUrl' => $imageProfilUrl,
  407.         ]);
  408. }
  409. /**
  410.  *@Route("/login", name="security.login" , methods={"GET", "POST"})
  411.  */
  412. public function loginUser(Request $requestAuthenticationUtils $authenticationUtilsSessionInterface $session)
  413. {
  414.     $error $authenticationUtils->getLastAuthenticationError();
  415.     /*if( $error !== null )
  416.     {
  417.         $error = $error->getMessage();
  418.     }*/
  419.     $param $request->query->get('targetPath');
  420.     $lastUsername $authenticationUtils->getLastUsername();   
  421.     $session->set('lastUserName'$lastUsername);
  422.     //$this->saveTargetPath($session, 'main', $request->headers->get('referer'));
  423.     if( $request->query->get('tokenForgotPassword') !== null )
  424.     {
  425.         return $this->redirectToRoute('home');
  426.     }
  427.     return $this->render('form.html.twig', [
  428.         'last_username' => $lastUsername,
  429.         'error'         => $error,
  430.         'param'   => $param
  431.     ]);
  432. }
  433. /**
  434.  *@Route("/logoutuser", name="security.logout")
  435.  */
  436. public function logoutUser(Request $request)
  437. {
  438.     $this->denyAccessUnlessGranted('ROLE_USER');
  439.     return $this->render('form.html.twig');
  440. }
  441. /**
  442. *
  443. *@Route("/profiluser", name="profil.user")
  444. */
  445. public function profilView(Request $requestMangopayService $mangoPayServiceOrdersRepository $ordersRepositoryOffersRepository $offersRepository)
  446. {
  447.     $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
  448.     $user $this->getUser();
  449.     $accountForm $user->getAccountform();
  450.     if($accountForm){
  451.         $orders $ordersRepository->findBy(['accountForm'=> $accountForm->getId()]);
  452.         $offers $offersRepository->findByAccountForm($accountForm);
  453.     }
  454.     //var_dump($orders);die();
  455.     if ( $user !== null && isset($orders) && $offers !== null )
  456.     {    
  457.         $hasAccess in_array('ROLE_USER'$user->getRoles());
  458.         return $this->render('profil.html.twig', [
  459.             'user'=>$user
  460.             'orders'=>$orders
  461.         ]);
  462.     } else {
  463.         return $this->render('profil.html.twig', [
  464.             'user'=>$user 
  465.         ]);
  466.     }
  467.     return $this->render('form.html.twig');
  468. }
  469. /**
  470.  * 
  471.  *@Route("/declarebusiness")
  472.  */
  473. public function declareBusiness(MangopayService $mangopayService){
  474.     $this->denyAccessUnlessGranted('ROLE_USER');
  475.     $userId "";
  476.     return $mangopayService->createUboDeclaration($userId);
  477. }
  478. /**
  479. *
  480. *@Route("/deleteuser", name="delete.user")
  481. */
  482. public function deleteUser(Request $request)
  483. {
  484.     $this->denyAccessUnlessGranted('ROLE_USER');
  485.     $entityManager $this->getDoctrine()->getManager();    
  486.     $user $this->getUser();
  487.     if($user !== null && $user->getAccountForm() !== null )
  488.     {
  489.         $this->addFlash('warning''Veuillez supprimer votre vitrine ou boutique pour pouvoir supprimer votre compte');
  490.     }
  491.     else 
  492.     {    
  493.         $imagePro $user->getImageProfil();
  494.         if($imagePro !== null )
  495.         {
  496.             $user->setImageProfil(null);
  497.             $imagePro->setUser(null);
  498.             $entityManager->persist($imagePro);
  499.             $entityManager->flush();
  500.             $entityManager->remove($imagePro);
  501.             $entityManager->flush();
  502.         }
  503.         $entityManager->remove($user);
  504.         $entityManager->flush();
  505.         $this->get('security.token_storage')->setToken(null);
  506.         $this->get('request')->getSession()->invalidate();
  507.         return $this->render('delete.user.html.twig');
  508.     }
  509.             return $this->render('profil.html.twig', [
  510.                 'user'=>$user 
  511.             ]);
  512. }
  513. /**
  514.  * @Route("user.resend/{email}", name="user.resend")
  515.  */
  516. public function resendEmailVerification(Request $requestUserRepository $userRepository, \Swift_Mailer $mailer$email)
  517. {
  518.     $user $userRepository->findOneBy(['email' => $email]);
  519.     if ($user) {
  520.         $user->setVerificationToken(bin2hex(random_bytes(32))); // 64 characters
  521.         $entityManager $this->getDoctrine()->getManager();
  522.         $entityManager->persist($user);
  523.         $entityManager->flush();
  524.         // Send the email again
  525.         $logger = new \Swift_Plugins_Loggers_ArrayLogger;
  526.         $mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
  527.         $message = (new \Swift_Message())  
  528.             ->setSubject('Jobingwada : confirmation de votre inscription'
  529.             ->setFrom(['contact@jobingwada.fr' => 'Jobingwada'])
  530.             ->setTo("{$email}")
  531.             ->setBody$this->renderView'welcome.html.twig',
  532.                 [
  533.                     'user' => $user,
  534.                     'token' => $user->getVerificationToken(),
  535.                 ]
  536.                 ),
  537.                 'text/html' 
  538.             );
  539.         $numSent $mailer->send($message);
  540.         }
  541.     }
  542. }