src/Form/UserType.php line 16

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\ChoiceType;
  7. use Symfony\Component\Form\Extension\Core\Type\DateType;
  8. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  9. use Symfony\Component\Form\Extension\Core\Type\TextType;
  10. use Symfony\Component\Form\FormBuilderInterface;
  11. use Symfony\Component\OptionsResolver\OptionsResolver;
  12. use Symfony\Component\Validator\Constraints as Assert;
  13. class UserType extends AbstractType
  14. {
  15. public function buildForm(FormBuilderInterface $builder, array $options): void
  16. {
  17. $builder
  18. ->add('firstName', TextType::class, [
  19. "label" => "Prénom",
  20. "attr" => [
  21. "placeholder" => "Prénom",
  22. ],
  23. "required" => true,
  24. ])
  25. ->add('lastName', TextType::class, [
  26. "label" => "Nom",
  27. "attr" => [
  28. "placeholder" => "Nom",
  29. ],
  30. "required" => true,
  31. ])
  32. ->add('address', TextType::class, [
  33. "label" => "Adresse",
  34. "attr" => [
  35. "placeholder" => "Adresse",
  36. ],
  37. "required" => true,
  38. ])
  39. ->add('address2', TextType::class, [
  40. "label" => "Complément d'adresse",
  41. "attr" => [
  42. "placeholder" => "Complément d'adresse",
  43. ],
  44. "required" => false,
  45. ])
  46. ->add('zipCode', TextType::class, [
  47. "label" => "Code postal",
  48. "attr" => [
  49. "placeholder" => "Code postal",
  50. ],
  51. "required" => true,
  52. ])
  53. ->add('city', TextType::class, [
  54. "label" => "Ville",
  55. "attr" => [
  56. "placeholder" => "Ville",
  57. ],
  58. "required" => true,
  59. ])
  60. ->add('phone', TextType::class, [
  61. "label" => "Téléphone",
  62. "attr" => [
  63. "placeholder" => "Téléphone",
  64. ],
  65. "required" => true,
  66. ])
  67. ->add('email', TextType::class, [
  68. "label" => "Email",
  69. "attr" => [
  70. "placeholder" => "Email",
  71. ],
  72. "required" => true,
  73. ])
  74. ->add('owner', ChoiceType::class, [
  75. "label" => "Propriétaire",
  76. "choices" => [
  77. "Non" => false,
  78. "Oui" => true,
  79. ],
  80. "required" => false,
  81. ])
  82. ->add('dateOfBirth', DateType::class, [
  83. "label" => "Date de naissance",
  84. 'widget' => 'single_text',
  85. 'html5' => true,
  86. "required" => false,
  87. ])
  88. ->add('pdlNumber', TextType::class, [
  89. "label" => "PDL",
  90. 'constraints' => [
  91. new Assert\Regex([
  92. 'pattern' => '/^\d+$/',
  93. 'message' => 'Ce champ doit contenir uniquement des chiffres.'
  94. ]),
  95. ],
  96. 'attr' => [
  97. "placeholder" => "PDL",
  98. "maxlength" => 14,
  99. 'inputmode' => 'numeric', // Clavier numérique sur mobile
  100. 'pattern' => '[0-9]*', // HTML5 validation côté client
  101. 'oninput' => "this.value = this.value.replace(/[^0-9]/g, '');",
  102. ],
  103. "required" => false,
  104. ])
  105. ->add('pceNumber', TextType::class, [
  106. "label" => "PCE",
  107. 'constraints' => [
  108. new Assert\Regex([
  109. 'pattern' => '/^\d+$/',
  110. 'message' => 'Ce champ doit contenir uniquement des chiffres.'
  111. ]),
  112. ],
  113. 'attr' => [
  114. "placeholder" => "PCE",
  115. "maxlength" => 14,
  116. 'inputmode' => 'numeric', // Clavier numérique sur mobile
  117. 'pattern' => '[0-9]*', // HTML5 validation côté client
  118. 'oninput' => "this.value = this.value.replace(/[^0-9]/g, '');",
  119. ],
  120. "required" => false,
  121. ])
  122. ->add('gas', CheckboxType::class, [
  123. "label" => "Gaz",
  124. "required" => false,
  125. ])
  126. ->add('electricity', CheckboxType::class, [
  127. "label" => "Electricité",
  128. "required" => false,
  129. ])
  130. ->add('photovoltaique', CheckboxType::class, [
  131. "label" => "Photovoltaïque",
  132. "required" => false,
  133. ])
  134. ->add('thermostat', CheckboxType::class, [
  135. "label" => "Thermostat",
  136. "required" => false,
  137. ])
  138. ->add('stepInProcess', ChoiceType::class, [
  139. "label" => "Étape du processus",
  140. "choices" => [
  141. "Vierge" => "Vierge",
  142. "Prise de contact" => "Prise de contact",
  143. "ACD signée" => "ACD signée",
  144. "Contrat envoyé" => "Contrat envoyé",
  145. "Contrat signé" => "Contrat signé",
  146. ],
  147. "required" => false,
  148. ])
  149. ->add('comment', TextareaType::class, [
  150. "label" => "Commentaire",
  151. "required" => false,
  152. ])
  153. ;
  154. }
  155. public function configureOptions(OptionsResolver $resolver): void
  156. {
  157. $resolver->setDefaults([
  158. 'data_class' => User::class,
  159. ]);
  160. }
  161. }