【问题标题】:PHP-SYMFONY3 add a formbuilder in a formbuilderPHP-SYMFONY 3 在表单构建器中添加表单构建器
【发布时间】: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


【解决方案1】:

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

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

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

结果直接与表单同步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多