feat: mise en page de la page "infos perso" et "gérer mes mots de passe"

This commit is contained in:
2026-03-27 00:56:50 +01:00
parent ba84b49134
commit 0e5351b7f4
15 changed files with 540 additions and 64 deletions

View File

@@ -17,26 +17,30 @@ class ChangePasswordType extends AbstractType
{
$builder
->add('oldPassword', PasswordType::class, [
'label' => 'Ancien mot de passe',
'label' => 'Mot de passe actuel',
'mapped' => false,
# Mise en place de contraintes dans la saisie du mot de passe
'constraints' => [
new NotBlank(message: 'Veuillez saisir votre mot de passe actuel'),
],
])
->add('newPassword', RepeatedType::class, [
'type' => PasswordType::class,
'invalid_message' => 'Les deux mots de passe doivent être identiques.',
'mapped' => false,
'first_options' => ['label' => 'Nouveau mot de passe'],
'second_options' => ['label' => 'Confirmer mot de passe'],
# Mise en place de contraintes dans la saisie du mot de passe
'constraints' => [
new NotBlank([
'message' => 'Veuillez saisir un mot de passe',
]),
new Length([
'min' => 8,
'minMessage' => 'Votre mot de passe doit faire au moins {{ limit }} caractères',
'max' => 4096,
]),
new NotBlank(
message: 'Veuillez saisir un mot de passe'
),
new Length(
min: 8,
minMessage: 'Votre mot de passe doit faire au moins {{ limit }} caractères',
max: 4096,
),
],
'first_options' => ['label' => 'Nouveau mot de passe'],
'second_options' => ['label' => 'Confirmer le nouveau mot de passe'],
])
;
}

View File

@@ -0,0 +1,73 @@
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Image;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\Regex;
class UserProfileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('firstName', TextType::class, [
'label' => 'Prénom',
'disabled' => true,
])
->add('lastName', TextType::class, [
'label' => 'Nom',
'disabled' => true,
])
->add('email', EmailType::class, [
'label' => 'E-mail',
'disabled' => true,
])
->add('emailDeSecours', EmailType::class, ['label' => 'E-mail de secours'])
->add('telephone', TelType::class, [
'label'=>'Téléphone',
'required' => false,
'attr' => [
'placeholder'=>'06 00 00 00 00',
'class'=> 'w-full px-4 py-3 border border-gris-clair rounded-lg focus:outline-none focus:border-bouton focus:ring-1 focus:ring-bouton transition-shadow'
],
'constraints' => [
new Regex(
pattern: '/^[0-9\+\s\.\-\(\)]+$/',
message: 'Le numéro de téléphone contient des caractères non valides'
),
new Length(
max: 20,
maxMessage: 'Le numéro est trop long (maximum {{ limit }} caractères)'
),
],
])
->add('image', FileType::class, [
'label' => 'Ma photo de profil',
'mapped' => false,
'required' => false,
'constraints' => [
new Image(
maxSize: '2M',
extensions: ['jpg', 'jpeg', 'png'],
extensionsMessage: 'Veuillez déposer une image JPG, JPEG ou PNG valide',)
],
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}