src/Form/RegistrationFormType.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\User;
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\FormBuilderInterface;
  6. use Symfony\Component\Validator\Constraints\Regex;
  7. use Symfony\Component\Validator\Constraints\IsTrue;
  8. use Symfony\Component\Validator\Constraints\Length;
  9. use Symfony\Component\Validator\Constraints\NotBlank;
  10. use Symfony\Component\OptionsResolver\OptionsResolver;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  13. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  14. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  15. class RegistrationFormType extends AbstractType
  16. {
  17.     public function buildForm(FormBuilderInterface $builder, array $options): void
  18.     {
  19.         $builder
  20.             ->add('email'EmailType::class, [
  21.                 'attr' => [
  22.                     'class' => 'form-control',
  23.                     'placeholder' => 'Entrer votre mail ex: nom@domaine.fr'
  24.                 ],
  25.                 'constraints' => [
  26.                     new NotBlank(),
  27.                     new Regex([
  28.                         'message' => 'Format invalide',                        
  29.                         'pattern' => "/^\\S+@\\S+\\.\\S+$/" // la plus complex "/^[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/"
  30.                     ]),
  31.                 ],
  32.                 'label' => 'E-mail',
  33.                 'label_attr' => ['class' => 'my-2']
  34.             ])   
  35.             ->add('firstname'TextType::class, [
  36.                 'attr' => [
  37.                     'class' => 'form-control',
  38.                     'placeholder' => 'Entrez votre prénom'
  39.                 ],
  40.                 'constraints' => [
  41.                     new NotBlank(),
  42.                     new Regex([
  43.                         'message' => 'Un prénom ne peut contenir que des lettres...',                        
  44.                         'pattern' => "/^[a-zA-Z-' ]*$/" //'^[a-zA-Z]'
  45.                     ]),
  46.                 ],
  47.                 'label' => 'Prénom',
  48.                 'label_attr' => ['class' => 'my-2']
  49.             ])
  50.             ->add('lastname'TextType::class, [
  51.                 'attr' => [
  52.                     'class' => 'form-control',
  53.                     'placeholder' => 'Entrez votre nom'
  54.                 ],
  55.                 'constraints' => [
  56.                     new NotBlank(),
  57.                     new Regex([
  58.                         'message' => 'Un nom ne peut contenir que des lettres...',                        
  59.                         'pattern' => "/^[a-zA-Z-' ]*$/" //'^[a-zA-Z]'
  60.                     ]),
  61.                 ],
  62.                 'label' => 'Nom',
  63.                 'label_attr' => ['class' => 'my-2']
  64.             ])
  65.             ->add('phone'TextType::class, [
  66.                 'attr' => [
  67.                     'class' => 'form-control',
  68.                     'placeholder' => 'Entrez votre n° de téléphone'
  69.                 ],
  70.                 'constraints' => [
  71.                     new NotBlank(),
  72.                     new Regex([
  73.                         'message' => 'Un numéro de téléphone ne doit contenir que des chiffres...',                        
  74.                         'pattern' => "/^(0|\+33)[1-9][0-9]{8}$/"     // "/^\\+?[1-9][0-9]{7,14}$/"    ^(0|\+33)[1-9]( *[0-9]{2}){4}+$                    
  75.                     ]),
  76.                 ],
  77.                 'label' => 'Téléphone',
  78.                 'label_attr' => ['class' => 'my-2']
  79.             ])
  80.             ->add('company'TextType::class, [
  81.                 'attr' => [
  82.                     'class' => 'form-control',
  83.                     'placeholder' => 'Entrez votre entreprise'
  84.                 ],
  85.                 'constraints' => [
  86.                     new NotBlank(),
  87.                     new Regex([
  88.                         'message' => 'Un nom d\'entreprise ne peut contenir que des chiffres et des lettres...',                        
  89.                         'pattern' => "/^[a-zA-Z0-9-' ]*$/" //'^[a-zA-Z0-9]'
  90.                     ]),
  91.                 ],
  92.                 'label' => 'Entreprise',
  93.                 'label_attr' => ['class' => 'my-2']
  94.             ])
  95.             ->add('zipcode'TextType::class, [
  96.                 'attr' => [
  97.                     'class' => 'form-control',
  98.                     'placeholder' => 'Entrez votre code postal'
  99.                 ],
  100.                 'constraints' => [
  101.                     new NotBlank(),
  102.                     new Regex([
  103.                         'message' => 'Un code postal ne peut contenir que des chiffres et des lettres...',                        
  104.                         'pattern' => "/^[a-zA-Z0-9]*$/"
  105.                     ]),
  106.                 ],
  107.                 'label' => 'Code postal',
  108.                 'label_attr' => ['class' => 'my-2']
  109.             ])
  110.             ->add('city'TextType::class, [
  111.                 'attr' => [
  112.                     'class' => 'form-control',
  113.                     'placeholder' => 'Entrez votre ville'
  114.                 ],
  115.                 'constraints' => [
  116.                     new NotBlank(),
  117.                     new Regex([
  118.                         'message' => 'Un nom de ville ne peut contenir que des lettres...',                        
  119.                         'pattern' => "/^[a-zA-Z-' ]*$/" //'^[a-zA-Z]'
  120.                     ]),
  121.                 ],
  122.                 'label' => 'Ville',
  123.                 'label_attr' => ['class' => 'my-2']
  124.             ])
  125.             ->add('plainPassword'PasswordType::class, [
  126.                 // instead of being set onto the object directly,
  127.                 // this is read and encoded in the controller
  128.                 'mapped' => false,
  129.                 'attr' => [
  130.                     'class' => 'form-control',
  131.                     'placeholder' => 'Entrez votre mot de passe',
  132.                     'autocomplete' => 'new-password'                    
  133.                 ],
  134.                 'label' => 'Mot de passe',
  135.                 'label_attr' => ['class' => 'my-2'],
  136.                 'constraints' => [
  137.                     new NotBlank([
  138.                         'message' => 'Veuillez entrer un mot de passe',
  139.                     ]),
  140.                     new Regex([
  141.                         'pattern' => "/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/"//'^[a-zA-Z0-9@]', //^(?=.*\d)(?=.*[A-Z])(?=.*[@#$%])(?!.*(.)\1{2}).*[a-z]/m
  142.                         'message' => 'Votre mot de passe doit comporter au moins huit caractères, dont des lettres majuscules et minuscules, un chiffre et un symbole'
  143.                     ]),
  144.                     new Length([
  145.                         'min' => 8,
  146.                         'minMessage' => 'Votre mot de passe doit faire au moins {{ limit }} caractères',
  147.                         // max length allowed by Symfony for security reasons
  148.                         'max' => 4096,
  149.                     ]),
  150.                 ],   
  151.             ])
  152.             /*->add('agreeTerms', CheckboxType::class, [
  153.                 'mapped' => false,
  154.                 'constraints' => [
  155.                     new IsTrue([
  156.                         'message' => 'Vous devriez accepter nos termes..',
  157.                     ]),
  158.                 ],
  159.                 'label' => 'En cochant, veuillez assumer avoir lu le document RGPD et accepter nos conditions générales d'utilisation..',
  160.                 'label_attr' => ['class' => 'my-2 me-2']
  161.             ])*/
  162.         ;
  163.     }
  164.     public function configureOptions(OptionsResolver $resolver): void
  165.     {
  166.         $resolver->setDefaults([
  167.             'data_class' => User::class,
  168.         ]);
  169.     }
  170. }