2014-02-11 74 views
6

Symfony2有forms dynamic generation的可能性。Symfony2:动态生成嵌入表格

然而,有大问题,动态生成基于用户嵌入表单提交的数据:

如果我使用FormEvents :: PRE_SET_DATA那么我不能嵌入形式接收后的数据 - 仅父对象数据可

$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" 
    } 
    } 
); 

请帮忙:有没有什么办法根据用户提交的数据动态生成嵌入式表单?

我使用Symfony 2.4。

非常感谢您提前!

回答

9

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

对于他们两人都可以获取提交数据并更改表单。

它们之间的区别是:

  • FormEvents :: PRE_SUBMIT - 数据不是归一化,所以$事件 - >的getData() 返回简单阵列
  • FormEvents ::提交 - 数据被归一化,所以$事件 - >的getData()返回 模型对象

而且有更好的可能性:

您可以使用FormEvents :: POST_SUBMIT但是您需要将它附加到子窗体字段 - 而不是整个子窗体。

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

  1. 获取规范化的形式(模型对象)
  2. 修改表单字段肚里一到这之后的事件势必
  3. 领域的所有POST数据值我们会根据POST数据自动设置
+0

我很努力从FormEvents :: SUBMIT获取标准化数据,并且无法修改FormEvents :: POST_SUBMIT中的表单字段 - 即使绑定到子表单字段并且不管字段的顺序是什么 – Jonny