Symfony2自定义对象数组到表单域

问题描述:

我使用Guzzle从我的Symfony 2应用程序中的API获取一些数据。这些数据正确映射到我的模型中。该模型是具有一些属性的Contact对象。其中一个属性是ContactMethod数组这样Symfony2自定义对象数组到表单域

/** 
* @SerializedName("methods") 
* @Type("array<My\Bundle\Model\ContactMethod>") 
*/ 
private $methods; 

ContactMethod对象做只有两个属性:typevalue

class ContactMethod { 

/** 
* @SerializedName("type") 
* @Type("string") 
*/ 
private $type; 

/** 
* @SerializedName("value") 
* @Type("string") 
*/ 
private $value; 

... setters and getters ... 

我已经创建了其buildForm功能ContactType以以表格形式显示Contact的全部属性。但是当涉及到显示methods属性时,我希望TextInput适用于ContactMethod中的每一个,并且输入应该将type作为标签,将value作为值。

class ContactType extends AbstractType { 
public function buildForm(FormBuilderInterface $builder, array $options = array()) 
{ 
    $builder 
     ->add(...all the other simple fields...) 
     ->add(...what shall I add here ?) 

我还需要这以相反的方式工作:当所有的文本输入填充并提交,字段必须被一起打包成ContactMethod一个数组,所以我可以重新序列化和数据发送回API。

我试图玩弄自定义表单类型和数据转换器,但我找不到解决方案。

您的联系人对象被映射到一个联系人类型,因此只需添加属性methods及其类型(例如)"method_list"如果它被声明为服务或只是new MethodListType()

该列表是动态的,因此您必须为新类型编写自己的buildView方法。