Удалите пространство имен форм в форме Symfony2 (для REST API)

Я разрабатываю REST API с помощью Symfony2.

Для запроса POST и PUT я использую FormType. Что-то вроде :

class EmailType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('subject', 'textarea') [...] ; } public function getName() { return 'email'; } } 

Но когда я отправляю POST, я должен передать поля с пространством имен, например:

 { "email": { "subject": "subject" } } 

Но я не хочу это пространство имен верхнего уровня!

Есть идеи ?

Я использовал формы Symfony для API на основе JSON. Вам просто нужно изменить метод getName() для возврата '' :

 public function getName() { return ''; } 

Это, объединившись с FOSRestBundle , упростило работу с POSTed данными.

Тип формы должен иметь имя, потому что, если вы зарегистрируете его как службу, помеченную как тип формы, вам нужно как-то ссылаться на нее. В следующем фрагменте кода email – это имя типа формы:

 $form = $this->formFactory->create('email', $email); 

Вот почему вы должны вернуть имя в классе типа формы:

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

Таким образом, вместо создания типа формы без имени просто создайте форму – конкретный экземпляр этого типа формы – с пустым именем:

 $form = $this->formFactory->createNamed(null, 'email', $email); 

Пустая строка – '' – вместо null работает.