src/Form/ProfileFilterForm.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Dto\ProfileFilterFormData;
  4. use App\Dto\ProfileFilterFormDataFilters;
  5. use App\Form\Type\ProfileFiltersType;
  6. use Symfony\Component\Form\AbstractType;
  7. use Symfony\Component\Form\DataMapperInterface;
  8. use Symfony\Component\Form\Exception\UnexpectedTypeException;
  9. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  10. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  11. use Symfony\Component\Form\FormBuilderInterface;
  12. use Symfony\Component\Form\FormInterface;
  13. use Symfony\Component\OptionsResolver\OptionsResolver;
  14. class ProfileFilterForm extends AbstractType implements DataMapperInterface
  15. {
  16.     /**
  17.      * @inheritDoc
  18.      */
  19.     public function buildForm(FormBuilderInterface $builder, array $options): void
  20.     {
  21.         $builder->add('listing'HiddenType::class, [
  22.             'required' => true,
  23.         ]);
  24.         $builder->add('listing_parameters'HiddenType::class, [
  25.             'required' => false,
  26.         ]);
  27.         $builder->add('filters'ProfileFiltersType::class, [
  28.             'required' => false,
  29.             'listing' => isset($options['form_data']) ? ($options['form_data'])->listing null,
  30.             'listing_parameters' => isset($options['form_data']) ? ($options['form_data'])->listingParameters null,
  31.             'profiles_presence_by_filters' => $options['profiles_presence_by_filters'] ?? null,
  32.         ]);
  33.         $builder->add('submit'SubmitType::class, [
  34.         ]);
  35.         $builder->setDataMapper($this);
  36.     }
  37.     public function configureOptions(OptionsResolver $resolver): void
  38.     {
  39.         $resolver->setDefined('form_data');
  40.         $resolver->setAllowedTypes('form_data'ProfileFilterFormData::class);
  41.         $resolver->setAllowedTypes('form_data'null);
  42.         $resolver->setDefined('profiles_presence_by_filters');
  43.         $resolver->setAllowedTypes('profiles_presence_by_filters''array');
  44.         $resolver->setAllowedTypes('profiles_presence_by_filters'null);
  45.         $resolver->setDefaults([
  46.             'data_class' => ProfileFilterFormData::class,
  47.             'empty_data' => null,
  48.         ]);
  49.     }
  50.     /**
  51.      * @inheritDoc
  52.      */
  53.     public function mapDataToForms($data$forms)
  54.     {
  55.         if (null === $data) {
  56.             return null;
  57.         }
  58.         if (!$data instanceof ProfileFilterFormData) {
  59.             throw new UnexpectedTypeException($dataProfileFilterFormData::class);
  60.         }
  61.         /** @var FormInterface[] $forms */
  62.         $forms iterator_to_array($forms);
  63.         /** @var ProfileFilterFormData */
  64.         $forms['listing']->setData($data->listing);
  65.         $forms['listing_parameters']->setData(json_encode($data->listingParameters));
  66.         $forms['filters']->setData($data->filters);
  67.     }
  68.     /**
  69.      * @inheritDoc
  70.      */
  71.     public function mapFormsToData($forms, &$viewData): void
  72.     {
  73.         /** @var FormInterface[] $forms */
  74.         $forms iterator_to_array($forms);
  75.         if (!$viewData instanceof ProfileFilterFormData) {
  76.             $viewData = new ProfileFilterFormData('', [], new ProfileFilterFormDataFilters());
  77.         }
  78.         $viewData->listing $forms['listing']->getData();
  79.         $viewData->listingParameters json_decode($forms['listing_parameters']->getData(), true);
  80.         $viewData->filters $forms['filters']->getData();
  81.     }
  82. }