src/Form/UnsecureRegistrationFormType.php line 145

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