Symfony2自定义对象数组到表单域
问题描述:
我使用Guzzle从我的Symfony 2应用程序中的API获取一些数据。这些数据正确映射到我的模型中。该模型是具有一些属性的Contact
对象。其中一个属性是ContactMethod
数组这样Symfony2自定义对象数组到表单域
/**
* @SerializedName("methods")
* @Type("array<My\Bundle\Model\ContactMethod>")
*/
private $methods;
的ContactMethod
对象做只有两个属性:type
和value
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方法。