【问题标题】:Symfony how to extend collection form fieldSymfony如何扩展集合表单域
【发布时间】:2013-03-31 03:49:41
【问题描述】:

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

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。您可以通过以下方式避免此错误 将“data_class”选项设置为 “MyApp\MainBundle\Entity\Contact”或通过添加视图转换器 转换类的实例 MyApp\MainBundle\Entity\Contact 到标量、数组或实例 的 \ArrayAccess。

如果我使用这个:

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

效果很好。

我不想按照建议实现这个 data_class...我想扩展集合小部件

【问题讨论】:

    标签: forms symfony collections custom-post-type


    【解决方案1】:

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

    据我所见,我相信您或多或少地以这种方式实例化您的表单:

    $model = new ParentClass();
    $model->setContacts(new Contact());
    
    $form = $this->createForm(new ParentFormType(), $model));
    

    但是,collection 表单类型不使用 Contact() 实例,而是使用此类实例的数组。

    使用 Contact() 实例而不是此类对象的数组提供您的实例化后,您的代码将失败。你需要做的是:

    $model = new ParentClass();
    $model->setContacts(array(new Contact()));
    
    $form = $this->createForm(new ParentFormType(), $model));
    

    虽然我相信你这样做了,但你还没有提交实例化代码,所以很难判断我是否正确。如果您的问题仍然存在,我建议您提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2015-08-04
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多