src/Form/Type/ProvidedServiceType.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Form\Type;
  3. use App\Entity\ProvidedServiceCondition;
  4. use App\Repository\ReadModel\ProvidedServiceOption;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\DataMapperInterface;
  7. use Symfony\Component\Form\Exception;
  8. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  9. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  10. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  11. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\Form\FormInterface;
  15. use Symfony\Component\OptionsResolver\OptionsResolver;
  16. use Symfony\Component\Validator\Constraints\Length;
  17. class ProvidedServiceType extends AbstractType implements DataMapperInterface
  18. {
  19.     /**
  20.      * @inheritDoc
  21.      */
  22.     public function buildForm(FormBuilderInterface $builder, array $options): void
  23.     {
  24.         $builder->add('service'HiddenType::class);
  25.         $builder->add('enabled'CheckboxType::class, [
  26.             'required' => false,
  27.             'label' => false,
  28.             'attr' => [
  29.                 'data-content' => 'service_enabled'
  30.             ],
  31.         ]);
  32.         $builder->add('condition'ChoiceType::class, [
  33.             //'required' => false,
  34.             'label' => false,
  35.             'multiple' => false,
  36.             'expanded' => true,
  37.             'choices' => ProvidedServiceCondition::toArray(),
  38.             'choice_translation_domain' => 'profile_service',
  39.             'attr' => [
  40.                 'data-content' => 'service_condition'
  41.             ],
  42.         ]);
  43.         $builder->add('extra_charge'NumberType::class, [
  44.             'required' => false,
  45.             'label' => '+$',
  46.             'attr' => [
  47.                 'data-content' => 'service_extra_charge'
  48.             ],
  49.             'empty_data' => '',
  50.         ]);
  51.         $builder->add('comment'TextareaType::class, [
  52.             'required' => false,
  53.             'label' => false,
  54.             'empty_data' => '',
  55.             'constraints' => [
  56.                 new Length(['max' => 80'maxMessage' => 'Максимальная длина - 80 символов'])
  57.             ],
  58.             'attr' => [
  59.                 'data-content' => 'service_comment',
  60.             ],
  61.         ]);
  62.         $builder->setDataMapper($this);
  63.     }
  64.     /**
  65.      * @inheritDoc
  66.      */
  67.     public function configureOptions(OptionsResolver $resolver): void
  68.     {
  69.         $resolver->setDefaults([
  70.             'data_class' => ProvidedServiceOption::class,
  71.             'empty_data' => null,
  72.             'allow_extra_fields' => true,
  73.         ]);
  74.     }
  75.     /**
  76.      * @inheritDoc
  77.      */
  78.     public function mapDataToForms($viewData$forms): void
  79.     {
  80.         if (!$viewData) {
  81.             return;
  82.         }
  83.         if (!$viewData instanceof ProvidedServiceOption) {
  84.             throw new Exception\UnexpectedTypeException($viewDataProvidedServiceOption::class);
  85.         }
  86.         /** @var FormInterface[] $forms */
  87.         $forms \iterator_to_array($forms);
  88.         $forms['service']->setData($viewData->service);
  89.         $forms['enabled']->setData($viewData->enabled);
  90.         $forms['condition']->setData($viewData->condition ?? ProvidedServiceCondition::INCLUDED);
  91.         $forms['extra_charge']->setData($viewData->extraCharge);
  92.         $forms['comment']->setData($viewData->comment);
  93.     }
  94.     /**
  95.      * @inheritDoc
  96.      */
  97.     public function mapFormsToData($forms, &$viewData): void
  98.     {
  99.         /** @var FormInterface[] $forms */
  100.         $forms \iterator_to_array($forms);
  101.         if(null === $forms['service']->getData()) {
  102.             return;
  103.         }
  104.         $viewData = new ProvidedServiceOption(
  105.             $forms['service']->getData(),
  106.             $forms['enabled']->getData(),
  107.             $forms['condition']->getData(),
  108.             $forms['extra_charge']->getData(),
  109.             $forms['comment']->getData(),
  110.         );
  111.     }
  112. }