src/Form/UserType.php line 20

  1. <?php
  2. namespace App\Form;
  3. use App\Entity\User;
  4. use App\Service\Constant;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
  7. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  8. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  9. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  10. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  11. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\OptionsResolver\OptionsResolver;
  15. use Symfony\Component\Validator\Constraints\Length;
  16. use Symfony\Component\Validator\Constraints\NotBlank;
  17. class UserType extends AbstractType
  18. {
  19.     private $constant;
  20.     public function __construct(Constant $constant)
  21.     {
  22.         $this->constant $constant;
  23.     }
  24.     public function buildForm(FormBuilderInterface $builder, array $options): void
  25.     {
  26.         $isEdit $options['is_edit'] ?? false;
  27.         $isRegister $options['is_register'] ?? false;
  28.         $isAdmin $options['is_admin'] ?? false;
  29.         $required = !$isEdit;
  30.         if ($isRegister || $isAdmin) {
  31.             $builder->add('email'EmailType::class, [
  32.                 'label' => 'Email',
  33.                 'required' => true,
  34.                 'attr' => [
  35.                     'placeholder' => 'exemple@email.com',
  36.                     'autocomplete' => 'email'
  37.                 ],
  38.                 'constraints' => [
  39.                     new NotBlank(['message' => 'L\'email est requis'])
  40.                 ]
  41.             ]);
  42.         } elseif ($isEdit) {
  43.             $builder->add('email'EmailType::class, [
  44.                 'label' => 'Email',
  45.                 'required' => true,
  46.                 'attr' => [
  47.                     'readonly' => true,
  48.                     'class' => 'bg-slate-100 cursor-not-allowed'
  49.                 ],
  50.                 'constraints' => [
  51.                     new NotBlank(['message' => 'L\'email est requis'])
  52.                 ]
  53.             ]);
  54.         }
  55.         $builder
  56.             ->add('nom'TextType::class, [
  57.                 'label' => 'Nom',
  58.                 'required' => $required,
  59.                 'attr' => ['placeholder' => 'Votre nom'],
  60.                 'constraints' => $required ? [new NotBlank(['message' => 'Le nom est requis'])] : []
  61.             ])
  62.             ->add('prenoms'TextType::class, [
  63.                 'label' => 'Prénoms',
  64.                 'required' => $required,
  65.                 'attr' => ['placeholder' => 'Vos prénoms'],
  66.                 'constraints' => $required ? [new NotBlank(['message' => 'Les prénoms sont requis'])] : []
  67.             ])
  68.             ->add('nomjeunefille'TextType::class, [
  69.                 'label' => 'Nom de jeune fille',
  70.                 'required' => false,
  71.                 'attr' => ['placeholder' => 'Si applicable']
  72.             ])
  73.             ->add('sexe'ChoiceType::class, [
  74.                 'choices' => $this->constant->sexe,
  75.                 'label' => 'Sexe',
  76.                 'required' => $required,
  77.                 'placeholder' => '-- Sélectionnez --'
  78.             ])
  79.             ->add('datenaissance'BirthdayType::class, [
  80.                 'widget' => 'single_text',
  81.                 'label' => 'Date de naissance',
  82.                 'required' => $required,
  83.                 'attr' => ['max' => date('Y-m-d')]
  84.             ])
  85.             ->add('lieunaissance'TextType::class, [
  86.                 'label' => 'Lieu de naissance',
  87.                 'required' => $required,
  88.                 'attr' => ['placeholder' => 'Ville de naissance']
  89.             ])
  90.             ->add('residence'TextType::class, [
  91.                 'label' => 'Lieu de résidence',
  92.                 'required' => $required,
  93.                 'attr' => ['placeholder' => 'Votre ville de résidence']
  94.             ])
  95.             ->add('situationmat'ChoiceType::class, [
  96.                 'choices' => $this->constant->situationmat,
  97.                 'label' => 'Situation matrimoniale',
  98.                 'required' => false,
  99.                 'placeholder' => '-- Sélectionnez --'
  100.             ])
  101.             ->add('contact'TextType::class, [
  102.                 'label' => 'Contact',
  103.                 'required' => $required,
  104.                 'attr' => [
  105.                     'placeholder' => 'Ex: 0708091011',
  106.                     'pattern' => '[0-9]{10}',
  107.                     'maxlength' => '10'
  108.                 ]
  109.             ])
  110.             ->add('numextrait'TextType::class, [
  111.                 'label' => 'Numéro d\'extrait',
  112.                 'required' => false,
  113.                 'attr' => ['placeholder' => 'Numéro de l\'extrait']
  114.             ])
  115.             ->add('nationalite'CountryType::class, [
  116.                 'label' => 'Nationalité',
  117.                 'choice_translation_locale' => 'fr',
  118.                 'data' => 'CI',
  119.                 'required' => $required,
  120.                 'attr' => ['class' => 'select2']
  121.             ])
  122.             ->add('nompere'TextType::class, [
  123.                 'label' => 'Nom du père',
  124.                 'required' => false,
  125.                 'attr' => ['placeholder' => 'Nom et prénoms du père']
  126.             ])
  127.             ->add('nommere'TextType::class, [
  128.                 'label' => 'Nom de la mère',
  129.                 'required' => false,
  130.                 'attr' => ['placeholder' => 'Nom et prénom de la mère']
  131.             ]);
  132.         if ($isRegister) {
  133.             $builder->add('password'RepeatedType::class, [
  134.                 'type' => PasswordType::class,
  135.                 'invalid_message' => 'Les mots de passe ne correspondent pas.',
  136.                 'required' => true,
  137.                 'first_options' => [
  138.                     'label' => 'Mot de passe',
  139.                     'attr' => ['placeholder' => '••••••••'],
  140.                     'constraints' => [
  141.                         new NotBlank(['message' => 'Le mot de passe est requis']),
  142.                         new Length(['min' => 6'minMessage' => 'Le mot de passe doit contenir au moins 6 caractères'])
  143.                     ]
  144.                 ],
  145.                 'second_options' => [
  146.                     'label' => 'Confirmation du mot de passe',
  147.                     'attr' => ['placeholder' => '••••••••']
  148.                 ]
  149.             ]);
  150.         }
  151.     }
  152.     public function configureOptions(OptionsResolver $resolver): void
  153.     {
  154.         $resolver->setDefaults([
  155.             'data_class' => User::class,
  156.             'is_edit' => false,
  157.             'is_admin' => false,
  158.             'is_register' => false
  159.         ]);
  160.     }
  161. }