【发布时间】:2017-06-08 01:55:51
【问题描述】:
我正在为包含已知数量的其他实体 (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”。
我不知道为什么会收到一个布尔值。
【问题讨论】:
-
最后,我没有使用 Result1Type::class,没有必要。我用的是集合类型,问题是你可以通过这种方式直接在控制器中创建新结果
标签: php symfony doctrine-orm formbuilder