Symfony 4 DateType удален отключен с помощью jquery, но данные не представлены - PullRequest
1 голос
/ 29 марта 2019

У меня есть поле DateType в форме, для которой установлено значение disabled = true. Когда конкретный флажок установлен пользователем, jquery подхватывает его и удаляет отключенное свойство из html, но значение по-прежнему не отправляется формой.

Просто интересно, есть ли лучший способ сделать это в Symfony? Поле даты должно быть отключено для пользователя, если он не установит флажок. Поле добавляется так:

$builder->add('overrideDate',DateType::class,[
            'required'=>false,
            'label'=>'Override Date',
            'disabled'=>true

        ]);

Я попытался изменить его с помощью события SUBMIT, чтобы symfony распознал поле как включенное, поскольку в html больше не отключено, поле все еще должно быть отправлено, поэтому я предполагаю, что Symfony игнорирует его из-за оригинал отключен = правда?

Это часть построителя, я пытаюсь изменить поле даты, когда оно отправлено на disabled = false, но overrideDate по-прежнему равно нулю

$builder->add('overrideDates',CheckboxType::class,[
            'label'=>'Override Dates',
            'required'=>false
        ]);

        $builder->add('overrideDate',DateType::class,[
            'required'=>false,
            'label'=>'Override Date',
            'disabled'=>true

        ]);


        $builder->addEventListener(FormEvents::SUBMIT,function(FormEvent $event){

            $form = $event->getForm();
            $data = $form->getData();


            if($data->isOverridingDates()){
                 $form->add('overrideDate',DateType::class,[
                     'required'=>false,
                     'label'=>'Override Date',
                     'disabled'=>false

                 ]);

            }
        });

1012 * РЕШЕНИЕ *

Хорошо, это немного неуклюже, но это работает для того, что я хочу сделать:

// event listener to enable/disable the overrideDate field if overrideDates === true
        $builder->addEventListener(FormEvents::PRE_SUBMIT,function(FormEvent $event){

            // get form and data
            $form = $event->getForm();
            $data = $event->getData();


            // add the overridedDate field back into the form
            $form->add('overrideDate',DateType::class,[
                'required'=>false,
                'label'=>'Override Date',
                'disabled'=>((bool)$data['overrideDates'] === true ? false : true)

            ]);

        });

1 Ответ

1 голос
/ 29 марта 2019

Вы должны посмотреть здесь: https://symfony.com/doc/current/form/dynamic_form_modification.html

Это хороший способ сделать то, что вы хотите сделать!Вы должны использовать FormEvents :: PRE_SUBMIT вместо FormEvents :: SUBMIT

// event listener to enable/disable the overrideDate field if overrideDates === true
$builder->addEventListener(FormEvents::PRE_SUBMIT,function(FormEvent $event){
    // get form and data
    $form = $event->getForm();
    $data = $event->getData();

    // add the overridedDate field back into the form
    $form->add('overrideDate',DateType::class,[
            'required'=>false,
            'label'=>'Override Date',
            'disabled'=>((bool)$data['overrideDates'] === true ? false : true)
    ]);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...