Forms Symfony如何扩展集合表单字段

Forms Symfony如何扩展集合表单字段,forms,symfony,collections,custom-post-type,Forms,Symfony,Collections,Custom Post Type,我正在尝试扩展集合表单,以便使用自己的模板呈现它 class ContactFieldType extends AbstractType { public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'collection' => array('type' => new ContactType())

我正在尝试扩展集合表单,以便使用自己的模板呈现它

class ContactFieldType extends AbstractType
{
  public function setDefaultOptions(OptionsResolverInterface $resolver)
  {
    $resolver->setDefaults(array(
      'collection' => array('type' => new ContactType())
    ));
  }

  public function getParent()
  {
    return 'collection';
  }

  public function getName()
  {
    return 'contactField';
  }
}
我是这样使用这种类型的:

$builder->add('contacts',new ContactFieldType(), array(
  'label_attr' => array('class' => 'contacts')
));
我得到以下错误:

表单的视图数据应为标量、数组或 \ArrayAccess的实例,但是类的实例 MyApp\MainBundle\Entity\Contact。您可以通过以下方法避免此错误: 将“数据类”选项设置为 “MyApp\MainBundle\Entity\Contact”或通过添加视图转换器 转换类的实例 MyApp\MainBundle\Entity\Contact到标量、数组或实例 of\ArrayAccess

如果我使用这个:

$builder->add('contacts','collection', array(
  'type' => new ContactType(),
  'label_attr' => array('class' => 'contacts')
));
它很好用


我不想像建议的那样实现这个data_类……我想扩展collection小部件

您的表单定义看起来很好,不需要更多的修改。您的问题在于实例

从我所看到的,我相信你或多或少地以这样的方式来举例说明你的形式:

$model = new ParentClass();
$model->setContacts(new Contact());

$form = $this->createForm(new ParentFormType(), $model));
但是,集合表单类型使用的不是Contact()实例,而是此类实例的数组

将Contact()实例而不是这些对象的数组提供给实例后,代码将失败。您需要做的是:

$model = new ParentClass();
$model->setContacts(array(new Contact()));

$form = $this->createForm(new ParentFormType(), $model));
虽然这是我相信你所做的,但你还没有提交实例代码,所以仍然很难判断我是否正确。如果您的问题仍然存在,我建议您提供它