我有一个难以解决的问题。我需要实现一个功能来创建自定义表单(即声明它应该具有哪些字段),然后能够保存和检索数据。表单生成机制基于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添加新的(空)组。
请告知。
答案 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')