2013-09-03 2 views
3

Я разрабатываю REST API с Symfony2.Удалить пространство имен форм в форме Symfony2 (для REST API)

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

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

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

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

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

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

Любые идеи?

ответ

-3

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

public function getName() 
{ 
    return ''; 
} 

Это cobined с FOSRestBundle, сделали работу с Отправленными данными очень легко.

+0

Так очевидно ... Спасибо – Gilles

7

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

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

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

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

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

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

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

+0

Я знаю, что вам не понравился подход, который я предложил выше. Не могли бы вы добавить некоторые детали в свой ответ о том, как это лучший способ справиться с этой проблемой. Благодарю. – StuBez

+0

@StuartChapman, сделано. –

+0

@StuBez Я думаю, это стоит изменить это на ответ, так как это лучшее решение для атаки на эту проблему. – Dandy

Смежные вопросы