src/Form/ClientType.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Client;
  4. use App\Form\UserType;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\TelType;
  7. use Symfony\Component\Form\Extension\Core\Type\TextType;
  8. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\OptionsResolver\OptionsResolver;
  11. use Symfony\Component\Validator\Constraints\Length;
  12. use Symfony\Component\Validator\Constraints\IsTrue;
  13. use Symfony\Component\Validator\Constraints\NotBlank;
  14. use App\Validator\Constraints\ValidPhoneNumber;
  15. use Symfony\Component\Routing\RouterInterface;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. class ClientType extends AbstractType
  18. {
  19.     private $router;
  20.     private $translator;
  21.     public function __construct(RouterInterface $routerTranslatorInterface $translator)
  22.     {
  23.         $this->router $router;
  24.         $this->translator $translator;
  25.     }
  26.     public function buildForm(FormBuilderInterface $builder, array $options): void
  27.     {
  28.         $termsUrl $this->router->generate('app_front_terms');
  29.         $privacyUrl $this->router->generate('app_front_privacy');
  30.         $builder
  31.             ->add('user'UserType::class, [
  32.                 'label' => true,
  33.             ])
  34.             ->add('entrepriseName'TextType::class, [
  35.                 'label' => 'Nom de l\'organisme ',
  36.                 'attr' => [
  37.                     'placeholder' => 'Nom de l\'entreprise ou l\'association'
  38.                 ],
  39.                 'constraints' => [
  40.                     new Length([
  41.                         'min' => 3,
  42.                         'minMessage' => 'Le nom de l\'entreprise doit avoir au moins {{ limit }} caractères.',
  43.                     ]),
  44.                 ],
  45.                 'required' => false
  46.             ])
  47.             ->add('siret'TextType::class, [
  48.                 'label' => 'Numéro Siret ou Siren',
  49.                 'attr' => [
  50.                     'maxlength' => '14'
  51.                 ],
  52.                 'constraints' => [
  53.                     new Length([
  54.                         'min' => 9,
  55.                         'max' => 14,
  56.                         'minMessage' => 'Le Numéro Siret ou Siren doit avoir au moins {{ limit }} caractères.',
  57.                         'maxMessage' => 'Le numéro SIRET ou SIREN ne peut pas contenir plus de {{ limit }} caractères.',
  58.                     ]),
  59.                 ],
  60.                 'required' => false
  61.             ])
  62.             ->add('mobilePhone'TelType::class, [
  63.                 'label' => 'Téléphone mobile',
  64.                 'attr' => [
  65.                     'maxlength' => 20
  66.                 ],
  67.                 'constraints' => [
  68.                     new Length([
  69.                         'min' => 10,
  70.                         'minMessage' => 'Le numéro de téléphone doit avoir au moins {{ limit }} caractères.',
  71.                     ]),
  72.                     new NotBlank([
  73.                         'message' => 'Veuillez entrer votre numéro de téléphone !',
  74.                     ]),
  75.                     new ValidPhoneNumber()
  76.                 ],
  77.                 'required' => true
  78.             ])
  79.             ->add('agreeTerms'CheckboxType::class, [
  80.                 'mapped' => false,
  81.                 'constraints' => [
  82.                     new IsTrue([
  83.                         'message' => 'Vous devez accepter notre conditions.',
  84.                     ]),
  85.                 ],
  86.                 'label_attr' => [
  87.                     'style' => 'width: auto; margin-left: 0.5rem; cursor: pointer !important'
  88.                 ],
  89.                 'label' => sprintf(
  90.                     'J\'accepte les <a href="%s" class="text-theme-blue">%s</a> et la <a href="%s" class="text-theme-blue">%s</a>.',
  91.                     $termsUrl,
  92.                     $this->translator->trans('conditions d\'utilisation'),
  93.                     $privacyUrl,
  94.                     $this->translator->trans('politique de confidentialité')
  95.                 ),
  96.                 'label_html' => true,
  97.                 'required' => true
  98.             ])
  99.         ;
  100.     }
  101.     public function configureOptions(OptionsResolver $resolver): void
  102.     {
  103.         $resolver->setDefaults([
  104.             'data_class' => Client::class,
  105.         ]);
  106.     }
  107.     public function getBlockPrefix()
  108.     {
  109.         return 'sg_client';
  110.     }
  111. }