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) use ($isFrench) {
  80. $qb = $er->createQueryBuilder('c');
  81. if ($isFrench) {
  82. $qb->orderBy('c.countryNameFr', 'ASC');
  83. } else {
  84. $qb->orderBy('c.countryName', 'ASC');
  85. }
  86. return $qb;
  87. }
  88. ])
  89. ->add('password', RepeatedType::class, [
  90. 'type' => PasswordType::class,
  91. 'invalid_message' => 'form.registration.password.invalid_message',
  92. 'options' => ['attr' => ['class' => 'password-field']],
  93. 'first_options' => [ //propriété du premier input
  94. 'label' => 'form.registration.password.first.label',
  95. 'attr' => [
  96. 'placeholder' => 'form.registration.password.first.placeholder',
  97. ],
  98. ],
  99. 'second_options' => [ //propriété du deuxieme input
  100. 'label' => 'form.registration.password.second.label',
  101. 'attr' => [
  102. 'placeholder' => 'form.registration.password.second.placeholder',
  103. ],
  104. ],
  105. ])
  106. ->add('agreedTerms', CheckboxType::class, [
  107. 'label' => 'form.registration.agreed_terms.label',
  108. 'mapped' => false,
  109. 'constraints' => [
  110. new IsTrue([
  111. 'message' => 'form.registration.agreed_terms.error',
  112. ]),
  113. ],
  114. ])
  115. ->add(
  116. 'referer',
  117. TextType::class,
  118. [
  119. 'required' => false,
  120. 'label' => false,
  121. 'attr' => ['style' => 'display:none'],
  122. 'mapped' => false,
  123. ]
  124. );
  125. $builder->get('referer')->setData($options['referer']);
  126. }
  127. public function configureOptions(OptionsResolver $resolver)
  128. {
  129. $resolver->setDefaults(
  130. [
  131. 'data_class' => User::class,
  132. 'referer' => '',
  133. 'locale' => $this->locale,
  134. ]
  135. );
  136. }
  137. }