【问题标题】:symfony ajax form dynamically modifysymfony ajax 表单动态修改
【发布时间】:2017-02-19 01:36:00
【问题描述】:

我有以下表单,其中包含仍在 WIP 中的数据库中的数据(我缺少一些尚未添加的字段)。 表单在第一个选择中加载数据,并基于该选择,我使用 ajax 填充第二个选择,其中包含基于第一个选择的选项(基本上是与所选值的关联)。然后从那里再次选择具有某些选项的选项等等,最后当我提交表单时,我想根据数据从数据库生成报告。 目前我被第二个字段卡住了,因为我总是得到一个错误:

This value is not valid.

表单类:

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('survey', EntityType::class, [
            'class' => SurveyManager::class,
            'placeholder' => 'Choose option',
            'attr' => [
                'class' => 'field-change',
            ],
        ])
        ->add('headquarter', ChoiceType::class, [
            'choices' => [],
        ])
        ->add('submit', SubmitType::class, [
            'label' => 'Save',
        ])
    ;
}

我不确定如何修复错误或者我应该如何处理这种类型的表单。你们能帮帮我吗?

根据我这样做的答案

$builder->addEventListener(
    FormEvents::PRE_SUBMIT,
    function (FormEvent $event) {
        $form = $event->getForm();

        $data = $event->getData();

        $form->add('headquarter', EntityType::class, [
            'class' => HeadQuarterManager::class,
            'query_builder' => function(HeadQuarterManagerRepository $er) {

                return $er->getHeadquarter($data['survey']);
            },
        ]);
    }
);

但是我收到了这个错误:

Notice: Undefined variable: data 

不太确定如何将数据传递给 getHeadquarter 方法,以便我可以为选择返回一个 id => 名称数组。

【问题讨论】:

    标签: php jquery ajax forms symfony


    【解决方案1】:

    最后我是这样做的:

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('survey', EntityType::class, [
                'class' => SurveyManager::class,
                'attr' => [
                    'class' => 'field-change',
                ],
            ])
            ->add('submit', SubmitType::class, [
    
            ])
            ->addEventListener(
                FormEvents::PRE_SUBMIT,
                function (FormEvent $event) {
                    $form = $event->getForm();
    
                    $data = $event->getData();
                    $modifier = $data['survey'];
                    $form->add('headquarter', EntityType::class, [
                        'class' => HeadQuarterManager::class,
                        'query_builder' => function (HeadQuarterManagerRepository $er) use ($modifier) {
                            return $er->getHeadquarter($modifier);
                        },
                    ]);
                }
            );
    }
    

    【讨论】:

    【解决方案2】:

    当您运行函数$form->isValid() 时,它会检查它在buildForm 函数中构建的表单。任何不存在的额外字段/值都会导致此错误。

    您可以使用form events 更改此行为。

    【讨论】:

    • 我在想你会说... :-D 问题是我从未使用过它们,而且我不太了解文档:(
    • @L.S 从它的声音你需要选项 3 symfony.com/doc/current/form/… 当你完成它一旦你习惯了它
    • 好的,让我看看那部分把一些代码放在一起,我们会从那里看到我做了什么愚蠢的事情。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多