src/Form/RegistrationType.php line 77

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Gender;
  4. use App\Entity\Localisation\CountryInfo;
  5. use App\Entity\User;
  6. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  7. use Symfony\Component\Form\AbstractType;
  8. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  9. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  10. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  11. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  12. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\Form\FormBuilderInterface;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Component\Validator\Constraints\IsTrue;
  18. class RegistrationType extends AbstractType
  19. {
  20.     private string $locale;
  21.     public function __construct(RequestStack $requestStack)
  22.     {
  23.         $request $requestStack->getCurrentRequest();
  24.         $this->locale $request $request->getLocale() : 'fr';
  25.     }
  26.     public function buildForm(FormBuilderInterface $builder, array $options)
  27.     {
  28.         $locale $options['locale'] ?? $this->locale;
  29.         $isFrench strpos($locale'fr') === 0;
  30.         $builder
  31.             ->add('gender'EntityType::class, [
  32.                 'class'       => Gender::class,
  33.                 'label'       => 'form.registration.gender.label',
  34.                 'placeholder' => 'form.registration.gender.placeholder',
  35.             ])
  36.             ->add('language'ChoiceType::class, [
  37.                 'label'       => 'form.registration.language.label',
  38.                 'placeholder' => 'form.registration.language.placeholder',
  39.                 'choices'     => [
  40.                     'form.registration.language.choice.french' => 'french',
  41.                     'form.registration.language.choice.english'  => 'english',
  42.                 ],
  43.                 'choice_translation_domain' => 'messages',
  44.             ])
  45.             ->add(
  46.                 'firstname',TextType::class,[
  47.                     'label' => 'form.registration.firstname.label',
  48.                     'attr' => [
  49.                         'placeholder' => 'form.registration.firstname.placeholder',
  50.                     ],
  51.                     'required' => true,
  52.                 ]
  53.             )
  54.             ->add('lastname',TextType::class,[
  55.                 'label' => 'form.registration.lastname.label',
  56.                 'attr' => [
  57.                     'placeholder' => 'form.registration.lastname.placeholder',
  58.                 ],
  59.                 'required' => true,
  60.             ])
  61.             ->add('email',EmailType::class,[
  62.                 'label' => 'form.registration.email.label',
  63.                 'attr' => [
  64.                     'placeholder' => 'form.registration.email.placeholder',
  65.                 ],
  66.                 'required' => true,
  67.                 ]
  68.             )
  69.             ->add('country'EntityType::class, [
  70.                 'class' => CountryInfo::class,
  71.                 'choice_label' => function(CountryInfo $country) use ($isFrench) {
  72.                     if ($isFrench && $country->getCountryNameFr()) {
  73.                         return $country->getCountryNameFr();
  74.                     }
  75.                     return $country->getCountryName();
  76.                 },
  77.                 'placeholder' => 'form.account.country.placeholder',
  78.                 'label'=> 'form.account.country.label',
  79.                 'query_builder' => function($er) {
  80.                     return $er->createQueryBuilder('c')
  81.                         ->orderBy('c.countryName''ASC');
  82.                 }
  83.             ])
  84.             ->add('password'RepeatedType::class, [
  85.                 'type'            => PasswordType::class,
  86.                 'invalid_message' => 'form.registration.password.invalid_message',
  87.                 'options'         => ['attr' => ['class' => 'password-field']],
  88.                 'first_options'   => [ //propriété du premier input
  89.                     'label' => 'form.registration.password.first.label',
  90.                     'attr'  => [
  91.                         'placeholder' => 'form.registration.password.first.placeholder',
  92.                     ],
  93.                 ],
  94.                 'second_options'  => [ //propriété du deuxieme input
  95.                     'label' => 'form.registration.password.second.label',
  96.                     'attr'  => [
  97.                         'placeholder' => 'form.registration.password.second.placeholder',
  98.                     ],
  99.                 ],
  100.             ])
  101.             ->add('agreedTerms'CheckboxType::class, [
  102.                 'label'       => 'form.registration.agreed_terms.label',
  103.                 'mapped'      => false,
  104.                 'constraints' => [
  105.                     new IsTrue([
  106.                                    'message' => 'form.registration.agreed_terms.error',
  107.                                ]),
  108.                 ],
  109.             ])
  110.             ->add(
  111.                 'referer',
  112.                 TextType::class,
  113.                 [
  114.                     'required' => false,
  115.                     'label'    => false,
  116.                     'attr'     => ['style' => 'display:none'],
  117.                     'mapped'   => false,
  118.                 ]
  119.             );
  120.         $builder->get('referer')->setData($options['referer']);
  121.     }
  122.     public function configureOptions(OptionsResolver $resolver)
  123.     {
  124.         $resolver->setDefaults(
  125.             [
  126.                 'data_class' => User::class,
  127.                 'referer' => '',
  128.                 'locale' => $this->locale,
  129.             ]
  130.         );
  131.     }
  132. }