Skip to content
Snippets Groups Projects
Commit 8c7cda62 authored by user's avatar user
Browse files

User V5

parent 10425a9a
No related branches found
No related tags found
No related merge requests found
......@@ -25,8 +25,8 @@ security:
secret: '%kernel.secret%'
access_control:
- { path: ^/admin, allow_if: "user and user.isAdmin == true" }
- { path: ^/*, allow_if: "user and user.isLocked != true" }
- { path: ^/admin, allow_if: "user and user.isAdmin() == true" }
- { path: ^/*, allow_if: "user and user.isLocked() != true" }
when@test:
security:
......
......@@ -22,7 +22,7 @@ class RegistrationController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) {
// Hacher le mot de passe
$hashedPassword = $passwordHasher->hashPassword($user, $form->get('plainPassword')->getData());
$hashedPassword = $passwordHasher->hashPassword($user, plainPassword: $form->get('plainPassword')->getData());
$user->setPassword($hashedPassword);
// Sauvegarder l'utilisateur
......
......@@ -8,6 +8,7 @@ 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;
final class UserController extends AbstractController
{
......@@ -64,4 +65,39 @@ 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 instanceof User) {
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(),
]);
}
}
<?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
{% 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment