将symfony2从2.1更新到2.3后,表单已损坏

时间:2014-01-18 20:39:48

标签: forms symfony doctrine-orm doctrine

以下错误消息:

  

表单的视图数据应该是标量,数组或类型   \ ArrayAccess的实例,但是是类的实例   Proxies__CG __ \ XXX \ YYYBundle \实体\ XXXGeo。你可以避免   通过将“data_class”选项设置为此错误   “Proxies__CG __ \ XXX \ YYYBundle \ Entity \ XXXGeo”或通过添加   转换类实例的视图转换器   代理_CG __ \ XXX \ YYYBundle \ Entity \ XXXGeo到标量,   数组或\ ArrayAccess的实例。

字段XXXGeo是嵌入式表单:

->add('geo',
            new XXXGeoType(),
            array(
                'required' => true
            )

这里的代码:

class XXXGeoType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
        ->add('address')
        ->add('city','text', array('data' => 'Somecity'))
        ->add('zip')
    ;
  }

  public function getDefaultOptions(array $options)
  {
    return array(
        'data_class' => 'XXX\YYYBundle\Entity\XXXGeo',
    );
  }

  public function getName()
  {
    return 'xxx_yyybundle_xxxgeotype';
  }
}

1 个答案:

答案 0 :(得分:1)

您需要更改getDefaultOptions方法,该方法不再用于传递默认选项。将其替换为setDefaultOptions

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'XXX\YYYBundle\Entity\XXXGeo'
    ));
}