我正在为实体(示例)创建一个表单,其中包含另一个实体的已知数量的表单(Result
)。
示例的集合为Result
。 (以及Parameter
)
在我的控制器中代码看起来像这样
$em = $this->getDoctrine()->getManager();
$sample = $em->getRepository('ReceptionBundle:Sample')->find($id);
$formBuilder = $this->createFormBuilder();
$i = 0;
foreach ($sample->getParameter() as $param){
$fb = $this->get('form.factory')->createNamedBuilder($i, FormType::Class, $sample);
if ($param->getCriteria()===false){
$fb->add('result', Result1Type::class, array('data_class'=>null));
}
else {
$fb->add('result', Result2Type::class, array('data_class'=>null));
}
$formBuilder->add($fb);
$i++;
}
$formBuilder->add('save', SubmitType::class);
$form = $formBuilder->getForm();
当我尝试使用此功能时,我在查看表单之前出现错误:
表单的视图数据应该是类ReceptionBundle \ Entity \ Result的实例,但是是Doctrine \ ORM \ PersistentCollection类的实例。您可以通过将“data_class”选项设置为null或通过添加将类Doctrine \ ORM \ PersistentCollection的实例转换为ReceptionBundle \ Entity \ Result的实例的视图转换器来避免此错误。
因此,当我尝试将“data_class”选项设置为null时,我可以显示该表单,但我无法提交它:
关联字段“ReceptionBundle \ Entity \ Sample#$ result”类型“Doctrine \ Common \ Collections \ Collection | array”的预期值,取而代之的是“boolean”。
我不知道为什么会收到一个布尔值。
答案 0 :(得分:0)
最后,我没有使用Result1Type :: class,没有必要。 我使用集合类型,就是你可以用这种方式直接在控制器中创建新结果
foreach ($sample->getParameter() as $param){
$result = new Result();
$sample->addResult($result);
}
$form = $this->createForm(AnalyseType::class, $sample);
结果直接与表格同步。