src/Form/RegistrationFormType.php line 161

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\Extension\Core\Type\CheckboxType;
  6. use Symfony\Component\Form\Extension\Core\Type\TextType;
  7. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  8. use Symfony\Component\Form\FormBuilderInterface;
  9. use Symfony\Component\OptionsResolver\OptionsResolver;
  10. use Symfony\Component\Validator\Constraints\IsTrue;
  11. use Symfony\Component\Validator\Constraints\Length;
  12. use Symfony\Component\Validator\Constraints\Email;
  13. use Symfony\Component\Validator\Constraints\NotBlank;
  14. use App\Entity\Job;
  15. use App\Entity\Subject;
  16. use App\Entity\Location;
  17. use App\Entity\SubLocation;
  18. use App\Repository\JobRepository;
  19. use App\Repository\LocationRepository;
  20. use App\Repository\SubLocationRepository;
  21. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  22. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  23. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  24. class RegistrationFormType extends AbstractType
  25. {
  26.     public function buildForm(FormBuilderInterface $builder, array $options): void
  27.     {
  28.         $builder
  29.             ->add('email'RepeatedType::class, [
  30.                 'invalid_message' => 'Les emails ne correspondent pas',
  31.                 'label' => 'Email',
  32.                 'first_options'  => ['attr' => [
  33.                     'placeholder' => 'Votre email'
  34.                 ]],
  35.                 'second_options'  => ['attr' => [
  36.                     'placeholder' => 'Confirmez votre email'
  37.                 ]],
  38.                 'constraints' => [
  39.                     new Email([
  40.                         'message' => 'Veuillez renseigner une adresse email valide.',
  41.                     ]),
  42.                     new NotBlank([
  43.                         'message' => 'Veuillez renseigner une adresse email.'
  44.                     ])
  45.                 ],
  46.             ])
  47.             ->add('lastName'TextType::class, [
  48.                 'label' => 'Nom',
  49.                 'required' => true,
  50.                 'attr' => [
  51.                     'placeholder' => 'Votre nom'
  52.                 ],
  53.                 'constraints' => [
  54.                     new Length([
  55.                         'min' => 2,
  56.                         'minMessage' => 'Le nom doit contenir au minimum {{ limit }} caractères',
  57.                         'max' => 255,
  58.                         'maxMessage' => 'Le nom doit contenir au maximum {{ limit }} caractères',
  59.                     ]),
  60.                     new NotBlank([
  61.                         'message' => 'Veuillez renseigner un nom.'
  62.                     ])
  63.                 ],
  64.             ])
  65.             ->add('firstName'TextType::class, [
  66.                 'label' => 'Prénom',
  67.                 'attr' => [
  68.                     'placeholder' => 'Votre prénom'
  69.                 ],
  70.                 'constraints' => [
  71.                     new Length([
  72.                         'min' => 2,
  73.                         'minMessage' => 'Le prénom doit contenir au minimum {{ limit }} caractères',
  74.                         'max' => 255,
  75.                         'maxMessage' => 'Le prénom doit contenir au maximum {{ limit }} caractères',
  76.                     ]),
  77.                     new NotBlank([
  78.                         'message' => 'Veuillez renseigner un prénom.'
  79.                     ])
  80.                 ],
  81.             ])
  82.             ->add('plainPassword'PasswordType::class, [
  83.                 'mapped' => false,
  84.                 'attr' => ['autocomplete' => 'new-password''placeholder' => '************'],
  85.                 'constraints' => [
  86.                     new NotBlank([
  87.                         'message' => 'Veuillez renseigner un mot de passe',
  88.                     ]),
  89.                     new Length([
  90.                         'min' => 8,
  91.                         'minMessage' => 'Le mot de passe doit contenir au minimum {{ limit }} caractères',
  92.                         'max' => 255,
  93.                     ]),
  94.                 ],
  95.             ])
  96.             ->add('job'EntityType::class, [
  97.                 'required' => true,
  98.                 'class' => Job::class,
  99.                 'label' => 'Fonction',
  100.                 'attr' => [
  101.                     'placeholder' => 'Sélectionnez dans la liste'
  102.                 ],
  103.                 'choice_label' => 'name',
  104.                 'multiple' => true,
  105.                 'expanded' => false,
  106.                 'query_builder' => function (JobRepository $jr) {
  107.                     $url $_SERVER['REQUEST_URI'];
  108.                     $parts explode("/"$url);
  109.                     return $jr->createQueryBuilder('j')
  110.                         ->join('j.client''c')
  111.                         ->where('c.slug = :slug')
  112.                         ->setParameter('slug'$parts[1])
  113.                         ->orderBy('j.name''ASC');
  114.                 },
  115.                 'constraints' => [
  116.                     new NotBlank([
  117.                         'message' => 'Merci de renseigner au moins une fonction'
  118.                     ]),
  119.                 ]
  120.             ])
  121.             ->add('location'EntityType::class, [
  122.                 'required'   => true,
  123.                 'placeholder' => 'Choisir dans la liste',
  124.                 'class' => Location::class,
  125.             'label' => 'Site',
  126.                 'attr' => [
  127.                     'placeholder' => 'Sélectionnez dans la liste'
  128.                 ],
  129.                 'choice_label' => 'name',
  130.                 'multiple' => false,
  131.                 'expanded' => false,
  132.                 'query_builder' => function (LocationRepository $lr) {
  133.                     $url $_SERVER['REQUEST_URI'];
  134.                     $parts explode("/"$url);
  135.                     return $lr->createQueryBuilder('l')
  136.                         ->join('l.client''c')
  137.                         ->andWhere('c.slug = :slug')
  138.                         ->setParameter('slug'$parts[1])
  139.                         ->andWhere('l.isActive = 1')
  140.                         ->orderBy('l.name''ASC');
  141.                 }
  142.             ])
  143.             ->add('subLocation'EntityType::class, [
  144.                 'required' => true,
  145.                 'placeholder' => 'Choisir dans la liste',
  146.                 'class' => SubLocation::class,
  147.                 'label' => 'Sous-Localisation',
  148.                 'attr' => [
  149.                     'placeholder' => 'Sélectionnez dans la liste'
  150.                 ],
  151.                 'choice_label' => 'name',
  152.                 'multiple' => false,
  153.                 'expanded' => false,
  154.                 'query_builder' => function (SubLocationRepository $slr) {
  155.                     $url $_SERVER['REQUEST_URI'];
  156.                     $parts explode("/"$url);
  157.                     return $slr->createQueryBuilder('s')
  158.                         ->join('s.client''c')
  159.                         ->andWhere('c.slug = :slug')
  160.                         ->setParameter('slug'$parts[1])
  161.                         ->andWhere('s.isActive = 1')
  162.                         ->orderBy('s.name''ASC');
  163.                 }
  164.             ])
  165.             ->add('subject'EntityType::class, [
  166.                 'required' => true,
  167.                 'class' => Subject::class,
  168.                 'label' => 'Centres d\'intérêts *',
  169.                 'attr' => [
  170.                     'placeholder' => 'Sélectionnez dans la liste'
  171.                 ],
  172.                 'choice_label' => 'name',
  173.                 'multiple' => true,
  174.                 'expanded' => false,
  175.                 'constraints' => [
  176.                     new NotBlank([
  177.                         'message' => 'Merci de renseigner au moins un centre d\'intérêt'
  178.                     ]),
  179.                 ]
  180.             ])
  181.             ->add('jobTitle'TextType::class, [
  182.                 'label' => 'Poste *',
  183.                 'required'   => false,
  184.                 'empty_data' => '',
  185.                 'attr' => [
  186.                     'placeholder' => 'Votre poste'
  187.                 ],
  188.                 'constraints' => [
  189.                     new Length([
  190.                         'max' => 255,
  191.                         'maxMessage' => 'Le poste doit contenir au maximum {{ limit }} caractères',
  192.                     ]),
  193.                 ],
  194.             ])
  195.             ->add('cgu'CheckboxType::class, [
  196.                 'label' => false,
  197.                 'mapped' => false,
  198.                 'data' => true,
  199.                 'required' => true,
  200.                 'constraints' => [
  201.                     new IsTrue([
  202.                       'message' => 'Veuillez accepter nos conditions d\'utilisation et notre politique de confidentialité.',
  203.                     ]),
  204.                   ],
  205.               ])
  206.         ;
  207.     }
  208.     public function configureOptions(OptionsResolver $resolver): void
  209.     {
  210.         $resolver->setDefaults([
  211.             'data_class' => User::class,
  212.             'attr' => [
  213.                 'novalidate' => 'novalidate'
  214.             ]
  215.         ]);
  216.     }
  217. }