src/Form/Type/MessengersType.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Form\Type;
  3. use App\Entity\ApartmentsPricing;
  4. use App\Entity\ExpressPricing;
  5. use App\Entity\Messengers;
  6. use App\Validator\Constraints\TelegramUsernameNotValid;
  7. use Symfony\Component\Form\AbstractType;
  8. use Symfony\Component\Form\DataMapperInterface;
  9. use Symfony\Component\Form\Exception;
  10. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  11. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  12. use Symfony\Component\Form\FormBuilderInterface;
  13. use Symfony\Component\Form\FormEvent;
  14. use Symfony\Component\Form\FormEvents;
  15. use Symfony\Component\Form\FormInterface;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Component\Validator\Constraints\GreaterThan;
  18. use Symfony\Component\Form\Extension\Core\Type\TextType;
  19. class MessengersType extends AbstractType implements DataMapperInterface
  20. {
  21.     /**
  22.      * @inheritDoc
  23.      */
  24.     public function buildForm(FormBuilderInterface $builder, array $options): void
  25.     {
  26.         $builder->add('telegram'CheckboxType::class, [
  27.             'required' => false,
  28.         ]);
  29.         $builder->add('telegram_username'TextType::class, [
  30.             'required' => false,
  31.             'mapped' => false,
  32.             'constraints' => [
  33.                 new TelegramUsernameNotValid()
  34.             ]
  35.         ]);
  36.         $builder->add('whatsapp'CheckboxType::class, [
  37.             'required' => false,
  38.         ]);
  39.         $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
  40.             $data $event->getData();
  41.             if (isset($data['telegram_username']) && is_string($data['telegram_username'])) {
  42.                 $username trim($data['telegram_username']);
  43.                 $username ltrim($username'@');
  44.                 $username mb_strtolower($username);
  45.                 $username mb_substr($username032);
  46.                 $data['telegram_username'] = $username;
  47.                 $event->setData($data);
  48.             }
  49.         });
  50.         $builder->setDataMapper($this);
  51.     }
  52.     /**
  53.      * @inheritDoc
  54.      */
  55.     public function configureOptions(OptionsResolver $resolver): void
  56.     {
  57.         $resolver->setDefaults([
  58.             'data_class' => Messengers::class,
  59.             'empty_data' => null,
  60.         ]);
  61.     }
  62.     /**
  63.      * @inheritDoc
  64.      */
  65.     public function mapDataToForms($viewData$forms)
  66.     {
  67.         if (null === $viewData) {
  68.             return null;
  69.         }
  70.         if (!$viewData instanceof Messengers) {
  71.             throw new Exception\UnexpectedTypeException($viewDataMessengers::class);
  72.         }
  73.         /** @var FormInterface[] $forms */
  74.         $forms iterator_to_array($forms);
  75.         $forms['telegram']->setData($viewData->hasTelegram());
  76.         $forms['whatsapp']->setData($viewData->hasWhatsApp());
  77.         $forms['telegram_username']->setData($viewData->getTelegramUsername());
  78.     }
  79.     /**
  80.      * @inheritDoc
  81.      */
  82.     public function mapFormsToData($forms, &$viewData): void
  83.     {
  84.         /** @var FormInterface[] $forms */
  85.         $forms iterator_to_array($forms);
  86.         $telegram_username $forms['telegram_username']->getData();
  87.         $telegram_username is_string($telegram_username) ? mb_strtolower($telegram_username) ?: null null;
  88.         $viewData = new Messengers(
  89.             $forms['telegram']->getData(),
  90.             $forms['whatsapp']->getData(),
  91.             $telegram_username
  92.         );
  93.     }
  94. }