Symfony2和Doctrine - 嵌入表单集合 - 编辑表单

时间:2013-02-16 17:54:18

标签: forms symfony collections doctrine-orm

我试图为我的一个实体制作编辑表格。我已成功创建了一个添加表单,但是在编辑视图中它根本不起作用。我只得到错误:

  

表单的视图数据应该是标量,数组或\ ArrayAccess的实例,但是类TA \ ManagerBundle \ Entity \ TaReservation的实例。您可以通过将“data_class”选项设置为“TA \ ManagerBundle \ Entity \ TaReservation”或添加视图转换器来将类TA \ ManagerBundle \ Entity \ TaReservation的实例转换为标量,数组或实例来避免此错误ArrayAccess接口。

TaReservation有TaReservationType,其中有两个集合:

->add('topay', 'collection', array(
  'required' => false,
  'type' => new TaTopayType(),
  'allow_add' => true,
  'allow_delete' => true,
  'by_reference' => false,
  'options' => array('data_class' => 'TA\ManagerBundle\Entity\TaTopay'), 
->add('client', 'collection', array(
  'required' => false,
  'type' => new TaClientType(),
  'allow_add' => true,
  'allow_delete' => true,
  'by_reference' => false,
  'options' => array('data_class' => 'TA\ManagerBundle\Entity\TaClient'), 

删除该集合后,或更改

$entity = $em->getRepository('TA\ManagerBundle\Entity\TaReservation')->find($id);

$entity = new TaReservation();

一切正常 - 没有编辑字段内的数据。谁能告诉我如何修复它?

2 个答案:

答案 0 :(得分:1)

[解决]

我发现,其中一个集合有一个隐藏字段,其中包含预留ID;)删除它解决了问题。

答案 1 :(得分:0)

“collection”表单字段没有“data_class”选项,我不知道你从哪里得到它。

检查表单类中是否有定义数据类的getDefaultOptions()方法,如下例所示:

 public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'Acme\DemoBundle\Entity\EntityName',
    );
}