src/Controller/Front/AccountController.php line 43
<?phpnamespace App\Controller\Front;use App\Entity\User;use App\Form\RegisterType;use App\Security\EmailVerifier;use Symfony\Component\Mime\Address;use App\Repository\TypeUserRepository;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bundle\SecurityBundle\Security;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Component\HttpFoundation\Request;use MercurySeries\FlashyBundle\FlashyNotifier;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Contracts\Translation\TranslatorInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;class AccountController extends AbstractController{public $typeUserRepo;private $emailVerifier;private $flashy;public function __construct(TypeUserRepository $typeUserRepository, EmailVerifier $emailVerifier, FlashyNotifier $flashy){$this->typeUserRepo = $typeUserRepository;$this->emailVerifier = $emailVerifier;$this->flashy = $flashy;}/*** Fonction de connexion de l'utilisateur a la plateforme* @param AuthenticationUtils $utils* @return Repsonse*/#[Route('/', name: 'account_login')]public function login(AuthenticationUtils $utils, Security $security): Response{$error = $utils->getLastAuthenticationError();$username = $utils->getLastUsername();//Verifie le role de l'utilisateur et le redirige en fonction de son roleif($this->getUser()){if($this->getUser()->hasRole('ROLE_ADMIN'))return $this->redirect($this->generateUrl('admin_dashboard'));elseif($this->getUser()->hasRole('ROLE_USER'))if($this->getUser()->getActive() != true ){//$this->flashy->error("Votre compte n'est pas actif, veuillez contacter l'administrateur");//return $this->redirect($this->generateUrl('account_logout'));return $this->redirect($this->generateUrl('desactived_account'));}else{return $this->redirect($this->generateUrl('users_profil', array('slug' => $this->getUser()->getSlug())));}throw new \Exception(AccessDeniedException::class);};return $this->render('account/login.html.twig', ['hasError' => $error,'username' => $username]);}#[Route('/deconnexion', name:'account_logout', methods: ['GET'])]public function logout(){//throw new \Exception('Don\'t forget to activate logout in security.yaml');}/*** Formulaire d'inscription* @param Request $request* @param UserPasswordEncoderInterface $encoder* @return Response*/#[Route('/inscription', name: 'account_register')]public function inscription(Request $request, UserPasswordHasherInterface $hasher, EntityManagerInterface $entityManager){$user = new User();$form = $this->createForm(RegisterType::class, $user);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$typeUser = $this->typeUserRepo->findOneBy(['nom' => 'client']);$passwordHashed = $hasher->hashPassword($user,$form->get('password')->getData());$user->setPassword($passwordHashed)->setActive(false)->setTypesUser($typeUser);$entityManager->persist($user);$entityManager->flush();// Génération d'une url signé pour la vérification de l'email de l'user$this->emailVerifier->sendEmailConfirmation('app_verify_email',$user,(new TemplatedEmail())->from(new Address('no-reply@picpesage.com', 'Pic Pesage Metrologie'))->to($user->getEmail())->subject('Veuillez confirmer votre e-mail')->htmlTemplate('registration/confirmation_email.html.twig'));$this->flashy->success("Veuillez vérifier votre adresse email pour terminer votre inscription");//Envoi mail de notification à l'administrateur pour validation du compte//Code...return $this->redirectToRoute('account_login'); // redirection sur Page de connexion}return $this->render('account/register.html.twig', ['user' => $user,'form' => $form->createView(),]);}#[Route('/verify/email', name: 'app_verify_email')]public function verifyUserEmail(Request $request, TranslatorInterface $translator): Response{$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');// validate email confirmation link, sets User::isVerified=true and persiststry {$this->emailVerifier->handleEmailConfirmation($request, $this->getUser());} catch (VerifyEmailExceptionInterface $exception) {$this->addFlash('verify_email_error', $translator->trans($exception->getReason(), [], 'VerifyEmailBundle'));return $this->redirectToRoute('account_register');}// @TODO Change the redirect on success and handle or remove the flash message in your templates$this->flashy->success('Votre adresse e-mail a été vérifiée.');return $this->redirectToRoute('account_login');}#[Route('/compte-desactive', name: 'desactived_account')]public function desactived(){return $this->render('account/desactived_account.html.twig');}}