Задать вопрос

Как динамически добавить поле в форму?

Всем добрый день, есть такая проблема, на форме есть select, на него вешаю событие PRE_SUBMIT, когда в селекте что то выбираю отправляется аджакс запрос, срабатывает событие PRE_SUBMIT и в зависимости от выбранного в селекте на страницу добавляю поле, до этого момента все нормально, но если я попытаюсь сохранить формы то она начнет ругаться что в форме появились extra field и мол типо надо поставить настройку что бы разрешить их, собственно вопрос, можно ли как то сделать что бы форма понимала что были добавлены динамические поля(у них настройка mapped=false) и поэтому они лежат просто в свойстве children. Плюс у меня есть такой момент что эти поля могут быть изначально на странице и при таком раскладе они попадают в children, а если они динамически добавились то летят в extra_data что мне не очень нравится.

Код максимально условный, но с сохранением главных моментов.

Главная форма

$builder->add('addNewRowFields', ChoiceType::class, array(
            'multiple' => false,
            'expanded' => false,
            'choices' => array(
                'Select' => false,
                'Значени1' => '1',
                'Значени2' => '2',
                'Значени3' => '3',
                'Значени4' => '4'
            ),
            'mapped' => false,
        ));

$builder->get('addNewRowFields')->addEventSubscriber(new AddRowFields());


Подписчик события

public static function getSubscribedEvents()
    {
        return array(FormEvents::PRE_SUBMIT => 'addFields');
    }

    public function addFields(FormEvent $event)
    {
        //тут условие на то что пришло из selecta
        $form = $event->getForm();
        $form->getParent()->add('lead', InvoiceLead::class, array(
                    'label' => false,
                    'mapped' => false,
                ));
    }

  • Вопрос задан
  • 92 просмотра
Подписаться 1 Средний 6 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы