Symfony pre_submit更改字段顺序

时间:2016-10-10 19:18:38

标签: php symfony symfony-forms

鉴于以下表单类型,如何在提交之前呈现我的第二个字段? 我尝试使用$form->remove,但我总是会收到此错误:

Warning: Illegal offset type in isset or empty

不确定如何解决这个问题。

/**
 * @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 个答案:

答案 0 :(得分:1)

我使用的解决方案是从类类型中删除提交按钮并手动将其添加到模板中,然后在提交按钮之前使用{{form_rest(form)}},它将使其正常。

答案 1 :(得分:0)

Symfony的Form组件不支持重新排列表单的字段。他们在问题#5827#11241上讨论了此功能。

您可以尝试在EventListener中删除字段submit,然后添加headquertersubmit(是的,再次)。但我不确定这是否有效。

另一个解决方案是安装IvoryOrderedFormBundle。它在表单字段中添加了新选项:position