src/Form/AccountRegistrationType.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use Symfony\Component\Form\AbstractType;
  4. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  5. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  6. use Symfony\Component\Form\Extension\Core\Type\TextType;
  7. use Symfony\Component\Form\FormBuilderInterface;
  8. use Symfony\Component\OptionsResolver\OptionsResolver;
  9. use Symfony\Component\Routing\RouterInterface;
  10. use Symfony\Component\Validator\Constraints\Email;
  11. use Symfony\Component\Validator\Constraints\NotBlank;
  12. class AccountRegistrationType extends AbstractType
  13. {
  14.     private RouterInterface $router;
  15.     public function __construct(RouterInterface $router)
  16.     {
  17.         $this->router $router;
  18.     }
  19.     /**
  20.      * Permet de générer des placeholders avec des prénoms aléatoires aussi bien masculin que féminin
  21.      */
  22.     private array $placeholders = [
  23.         [
  24.             'email'     => 'valentine@gmail.com',
  25.             'firstname' => 'Valentine',
  26.             'name'      => 'Dupond',
  27.         ],
  28.         [
  29.             'email'     => 'charlie@gmail.com',
  30.             'firstname' => 'Charlie',
  31.             'name'      => 'Dupond',
  32.         ],
  33.         [
  34.             'email'     => 'alice@gmail.com',
  35.             'firstname' => 'Alice',
  36.             'name'      => 'Dupond',
  37.         ]
  38.     ];
  39.     public function buildForm(FormBuilderInterface $builder, array $options)
  40.     {
  41.         $placeholder $this->getRandomPlaceholder();
  42.         $cguLink $this->router->generate("cgu");
  43.         $builder
  44.             ->add(
  45.                 'email',
  46.                 EmailType::class,
  47.                 [
  48.                     'label'    => 'Adresse email',
  49.                     'required' => true,
  50.                     'attr'     => [
  51.                         'placeholder' => 'Ex : ' $placeholder['email'],
  52.                         'pattern' => '[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$'
  53.                     ],
  54.                     'constraints' => [
  55.                         new NotBlank(['message' => "L'adresse email est obligatoire"]),
  56.                         new Email()
  57.                     ],
  58.                 ]
  59.             )
  60.             ->add(
  61.                 'name',
  62.                 TextType::class,
  63.                 [
  64.                     'label'    => 'Nom',
  65.                     'required' => true,
  66.                     'attr'     => [
  67.                         'placeholder' => 'Ex : ' $placeholder['name']
  68.                     ],
  69.                     'constraints' => [
  70.                         new NotBlank(['message' => "Le nom est obligatoire"]),
  71.                     ],
  72.                 ]
  73.             )
  74.             ->add(
  75.                 'firstname',
  76.                 TextType::class,
  77.                 [
  78.                     'label'    => 'Prénom',
  79.                     'required' => true,
  80.                     'attr'     => [
  81.                         'placeholder' => 'Ex : ' $placeholder['firstname']
  82.                     ],
  83.                     'constraints' => [
  84.                         new NotBlank(['message' => "Le prénom est obligatoire"]),
  85.                     ],
  86.                 ]
  87.             )->add(
  88.                 'activationCode',
  89.                 TextType::class,
  90.                 [
  91.                     'label'       => 'Code d\'activation',
  92.                     'required'    => true,
  93.                     'mapped'      => false,
  94.                     'data'        => $options['activationCode'],
  95.                     'attr'        => [
  96.                         'placeholder' => 'Ex : INVITE4934',
  97.                     ],
  98.                     'constraints' => [
  99.                         new NotBlank(['message' => "Le code d\'activation est fourni par votre structure"]),
  100.                     ],
  101.                 ]
  102.             )
  103.             ->add(
  104.                 'cgu',
  105.                 CheckboxType::class,
  106.                 [
  107.                     'label' => "J'accepte les <a href=\"$cguLink\" target='_blank' class=\"a\">CGU</a>",
  108.                     'label_html' => true,
  109.                     'required' => true,
  110.                     'constraints' => [
  111.                         new NotBlank(['message' => "Vous devez accepter les CGU"]),
  112.                     ],
  113.                 ]
  114.             );
  115.     }
  116.     /**
  117.      * Retourne aléatoirement un utilisateur placeholder
  118.      */
  119.     private function getRandomPlaceholder():array
  120.     {
  121.         \shuffle($this->placeholders);
  122.         return \current($this->placeholders);
  123.     }
  124.     public function configureOptions(OptionsResolver $resolver)
  125.     {
  126.         $resolver->setDefaults([
  127.             'activationCode' => null,
  128.         ]);
  129.     }
  130. }