diff --git a/.env b/.env index eb30919784bcdaddaf95d9aa8992ae45f7aeb7a8..c5270338ff8d661bf71d14bf1cf999d03080a095 100644 --- a/.env +++ b/.env @@ -27,7 +27,7 @@ MESSENGER_TRANSPORT_DSN=sync:// # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" # DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8.0.32&charset=utf8mb4" # DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4" -DATABASE_URL="mysql://root:root@db_docker_symfony:3306/wishlist?serverVersion=8.0" +DATABASE_URL="mysql://root:hamma@localhost:3306/wishlist?serverVersion=8.0" ###< doctrine/doctrine-bundle ### APP_SECRET=3d9f431b0fd768e0cb2e8b139c66e9fd67ecbd49762f6a345d459e2f115f61b4 diff --git a/src/Controller/RegistrationController.php b/src/Controller/RegistrationController.php index 43867d81832ed79066e2ce02306a8bda7a4a6538..96c886026eb60f8b33d73c21731544c9b58c09a7 100644 --- a/src/Controller/RegistrationController.php +++ b/src/Controller/RegistrationController.php @@ -22,7 +22,7 @@ class RegistrationController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { // Hacher le mot de passe - $hashedPassword = $passwordHasher->hashPassword($user, $form->get('password')->getData()); + $hashedPassword = $passwordHasher->hashPassword($user, plainPassword: $form->get('plainPassword')->getData()); $user->setPassword($hashedPassword); // Sauvegarder l'utilisateur diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index a53eb97ea42b9538832991f6359a3350cc2125dc..f8088efc5d4c1a61f96b7e27c7d4dda6d1812078 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -8,6 +8,9 @@ use Symfony\Component\Routing\Attribute\Route; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Component\HttpFoundation\Request; + +use App\Form\UserType; final class UserController extends AbstractController { @@ -64,4 +67,40 @@ final class UserController extends AbstractController $this->addFlash('success', 'Wishlist supprimée avec succès.'); return $this->redirectToRoute('user_dashboard'); } + + #[Route('/user/profile', name: 'user_profile')] + public function profile(Request $request, EntityManagerInterface $entityManager): Response + { + // Récupérer l'utilisateur connecté + $token = $this->container->get('security.token_storage')->getToken(); + if ($token) { + $user = $token->getUser(); + dump($user); + } else { + dump('Aucun token trouvé'); + } + + if ($user==null) + { + throw $this->createAccessDeniedException('Vous devez être connecté pour accéder à cette page.'); + } + + // Créer le formulaire pour modifier les informations de l'utilisateur + $form = $this->createForm(UserType::class, $user); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + // Sauvegarder les modifications + $entityManager->persist($user); + $entityManager->flush(); + + $this->addFlash('success', 'Votre profil a été mis à jour avec succès.'); + + return $this->redirectToRoute('user_profile'); + } + + return $this->render('user/profile.html.twig', [ + 'form' => $form->createView(), + ]); + } } diff --git a/src/Form/UserType.php b/src/Form/UserType.php new file mode 100644 index 0000000000000000000000000000000000000000..fbb140a00611683f6c38f08660de55994ced4d1d --- /dev/null +++ b/src/Form/UserType.php @@ -0,0 +1,40 @@ +<?php + +namespace App\Form; + +use App\Entity\User; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\EmailType; +use Symfony\Component\Form\Extension\Core\Type\PasswordType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class UserType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder + ->add('firstName', TextType::class, [ + 'label' => 'Prénom', + ]) + ->add('lastName', TextType::class, [ + 'label' => 'Nom', + ]) + ->add('email', EmailType::class, [ + 'label' => 'Email', + ]) + ->add('image', TextType::class, [ + 'label' => 'URL de l\'image de profil', + 'required' => false, + ]); + // Note : Ne pas inclure le champ "password" ici pour des raisons de sécurité. + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); + } +} \ No newline at end of file diff --git a/templates/user/profile.html.twig b/templates/user/profile.html.twig new file mode 100644 index 0000000000000000000000000000000000000000..ce689c9401f4aac428f341c6e9117f4e782e1dd8 --- /dev/null +++ b/templates/user/profile.html.twig @@ -0,0 +1,23 @@ +{% extends 'base.html.twig' %} + +{% block title %}Mon Profil{% endblock %} + +{% block body %} +<div class="container mt-5"> + <h1>Mon Profil</h1> + + {{ form_start(form) }} + {{ form_row(form.firstName) }} + {{ form_row(form.lastName) }} + {{ form_row(form.email) }} + {{ form_row(form.image) }} + <button type="submit" class="btn btn-primary">Mettre à jour</button> + {{ form_end(form) }} + + {% for message in app.flashes('success') %} + <div class="alert alert-success mt-3"> + {{ message }} + </div> + {% endfor %} +</div> +{% endblock %} \ No newline at end of file