src/Form/BusinessSubscriptionType.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\BusinessSubscription;
  4. use App\Entity\City;
  5. use App\Entity\Country;
  6. use App\Repository\CityRepository;
  7. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  8. use Symfony\Component\Form\AbstractType;
  9. use Symfony\Component\Form\Extension\Core\Type\TelType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\Form\FormEvent;
  15. use Symfony\Component\Form\FormEvents;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. class BusinessSubscriptionType extends AbstractType
  19. {
  20.     public function __construct(
  21.         private readonly TranslatorInterface $translator,
  22.         private readonly CityRepository $cityRepository
  23.     ){}
  24.     public function buildForm(FormBuilderInterface $builder, array $options): void
  25.     {
  26.         $builder
  27.             ->add('name'TextType::class, [
  28.                 'label' => $this->translator->trans('Pages.SignUp.Fields.Society', [], 'messages_front')
  29.             ])
  30.             ->add('email'EmailType::class, [
  31.                 'label' => $this->translator->trans('Pages.SignUp.Fields.Email', [], 'messages_front'),
  32.             ])
  33.             ->add('country'EntityType::class, [
  34.                 'mapped' => false,
  35.                 'class' => Country::class,
  36.                 'placeholder' => $this->translator->trans('Entities.Country.Label'),
  37.                 'label' => $this->translator->trans('Entities.Country.Label'),
  38.                 'data' => $options['data']->getCity() ? $options['data']->getCity()->getCountry() : null,
  39.             ])
  40.             ->add('city'EntityType::class, [
  41.                 'class' => City::class,
  42.                 'label' => $this->translator->trans('Pages.SignUp.Fields.City', [], 'messages_front'),
  43.                 'choices' => $options['data']->getCity() != null $this->cityRepository->findBy(['country' => $options['data']->getCity()->getCountry()]) : [],
  44.             ])
  45.             ->add('phone'TelType::class, [
  46.                 'label' => $this->translator->trans('Pages.SignUp.Fields.Phone', [], 'messages_front')
  47.             ])
  48.             ->add('address'TextareaType::class, [
  49.                 'label' => $this->translator->trans('Pages.SignUp.Fields.Address', [], 'messages_front'),
  50.                 'empty_data' => ""
  51.             ]);
  52.         $builder->get('country')->addEventListener(
  53.             FormEvents::POST_SUBMIT,
  54.             function (FormEvent $event) {
  55.                 $form $event->getForm();
  56.                 $country $form->getData();
  57.                 $cities $country === null ? [] : $this->cityRepository->findBy(['country' => $country]);
  58.                 $form->getParent()->add('city'EntityType::class, [
  59.                     'class' => City::class,
  60.                     'choices' => $cities,
  61.                 ]);
  62.             }
  63.         );
  64.     }
  65.     public function configureOptions(OptionsResolver $resolver): void
  66.     {
  67.         $resolver->setDefaults([
  68.             'data_class' => BusinessSubscription::class,
  69.         ]);
  70.     }
  71. }