PHP-SYMFONY3在formbuilder中添加formbuilder

时间:2017-06-08 01:55:51

标签: php symfony doctrine-orm formbuilder

我正在为实体(示例)创建一个表单,其中包含另一个实体的已知数量的表单(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”。

我不知道为什么会收到一个布尔值。

1 个答案:

答案 0 :(得分:0)

最后,我没有使用Result1Type :: class,没有必要。 我使用集合类型,就是你可以用这种方式直接在控制器中创建新结果

foreach ($sample->getParameter() as $param){

$result = new Result();
$sample->addResult($result);
}
 $form = $this->createForm(AnalyseType::class, $sample);

结果直接与表格同步。