表单集合预设数据不基于实体

时间:2014-12-22 11:54:37

标签: symfony symfony-forms entity-attribute-value

我有一个难以解决的问题。我需要实现一个功能来创建自定义表单(即声明它应该具有哪些字段),然后能够保存和检索数据。表单生成机制基于EAV模型 - 表单模板实体具有表单字段实体(表单模板属性)。每个表单字段都有类型,名称,标签等。 然后我动态显示表单(foreach $ fields as $ field(...)$ formBuilder-> add($ field-> getType()等)。毕竟数据保存在另一个名为FormInstanceData的实体中。由字段名称组成:字段值对。 困难的部分是我必须能够创建表单字段组的表单模板,其行为类似于集合(新的可以添加JS)。表单(使用模板生成)显示正确,但我检索数据有问题(因为最终数据不是一个实体,原因很明显)。可以使用检索到的数据成功填写简单字段(通过将字段名称作为键传递数据选项),但是我无法使嵌套集合字段起作用 - 即使在传递数据之后,集合也只是“#39” ; t显示。

负责这部分的代码部分如下所示:

elseif ($fieldType === 'collection'){
              $subfields = $field->getSubfields();
              $formBuilder->add('subfields', 'collection', array(
                'type' => new FormCollectionType($subfields),
                'allow_add' => true,
                'mapped' => false,
                'allow_delete' => true,
                'by_reference' => false,
                'options' => array('required' => false, 'data' => array(
                    array('title' => 'lorem', 'subtitle' => 'ipsum'),
                    array('title' => 'lorem', 'subtitle' => 'ipsum')

FormCollectionType也是使用$ subfields参数动态生成的。在这种情况下,集合中的每个项目都有两个字段 - 标题和副标题。通过我传递的数据,应该出现两个已填写的输入组,但没有任何内容。您仍然可以使用JS添加新的(空)组。

请告知。

1 个答案:

答案 0 :(得分:0)

好的,原来数据需要传递的不是:

'options' => array('required' => false, 'data' => array(
                array('title' => 'lorem', 'subtitle' => 'ipsum'),
                array('title' => 'lorem', 'subtitle' => 'ipsum')

但:

'data' => array(
                array('title' => 'lorem', 'subtitle' => 'ipsum'),
                array('title' => 'lorem', 'subtitle' => 'ipsum')