Php Symfony2:嵌入式表单的动态生成

Php Symfony2:嵌入式表单的动态生成,php,forms,events,symfony,Php,Forms,Events,Symfony,Symfony2有可能发生故障 但是,基于用户提交的数据动态生成嵌入表单存在很大问题: 如果使用FormEvents::PRE_SET_DATA,则无法接收嵌入表单的post数据-只有父对象数据可用 $builder->get('contacts')->addEventListener( FormEvents::POST_SET_DATA function(FormEvent $event) { $data = $event->getData(); //$dat

Symfony2有可能发生故障

但是,基于用户提交的数据动态生成嵌入表单存在很大问题:

如果使用FormEvents::PRE_SET_DATA,则无法接收嵌入表单的post数据-只有父对象数据可用

$builder->get('contacts')->addEventListener(
  FormEvents::POST_SET_DATA
  function(FormEvent $event) {
    $data = $event->getData(); //$data will contain embedded form object - not the data object!
  }
);
如果我使用FormEvents::POST_SUBMIT,那么我可能会收到数据,但我不能修改表单

$builder->get('contacts')->addEventListener(
  FormEvents::POST_SUBMIT,
  function(FormEvent $event) {
    $data = $event->getData(); //$data will contain filled data object - everything is ok
    $form = $event->getForm(); //form will be ok
    if ($data->getSomeValue()) {
      $form->add(...); //Error: "You cannot add children to a submitted form"
    }
  }
);
请帮助:是否有任何方法可以根据用户提交的数据动态生成嵌入表单

我使用symfony2.4


提前非常感谢

问题很容易解决:需要使用FormEvents::SUBMIT或FormEvents::PRE_SUBMIT事件

对于这两种情况,都可以获取提交数据并更改表单

它们之间的区别:

  • FormEvents::PRE_SUBMIT-数据未规范化,因此$event->getData() 返回简单数组
  • FormEvents::SUBMIT-数据是标准化的,因此$event->getData()返回 模型对象
还有更好的可能性:

您可以使用FormEvents::POST_SUBMIT,但需要将其附加到子表单字段,而不是整个子表单

在这种情况下,您将能够:

  • 以规范化形式获取所有POST数据(模型对象)
  • 修改事件绑定到的表单字段之后的表单字段
  • 字段值将根据POST数据自动设置

  • 我正在努力从FormEvents::SUBMIT获取规范化数据,并且无法修改FormEvents::POST_SUBMIT中的表单字段–即使绑定到子表单字段,也无法修改表单字段的顺序。