2015-02-06 5 views
1

Я получаю некоторые данные из API в моем приложении Symfony 2 с помощью Guzzle. Эти данные правильно отображаются в мою модель. Модель представляет собой объект Contact с некоторыми свойствами. Одним из тех, кто собственности является массивом ContactMethod сделано как этотSymfony2 массив настраиваемых объектов в поля формы

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

ContactMethod The объект имеет только два свойства: type и value

class ContactMethod { 

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

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

... setters and getters ... 

Я создал ContactType с его buildForm функции для того, чтобы показать все свойства 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, так что я могу reserialize и отправить обратно данные в API.

Я попытался поиграть с пользовательскими типами форм, а также с Data Transformers, но не смог найти решение.

ответ

0

Ваш контактный объект отображается на один ContactType, так что просто добавить свойство methods и его тип (например) "method_list", если он объявлен как сервис или просто new MethodListType().

Список динамический, поэтому вам нужно написать собственный метод buildView для нового типа.