Я разрабатываю 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
работает.