Сериализация данных FormView в JSON

Я пытаюсь изменить подход рендеринга шаблонов. Я использовал серверный механизм шаблонов. Теперь, когда мне нужно возвращать только JSON из бэкэнд вместо HTML, мне нужно перенести свой шаблон на front-end.

Проблема для меня как новичка, когда шаблон содержит форму. Другими словами, когда конечный JSON также должен содержать токен csrf. Пожалуйста, возьмите пример приложения CRUD для книг (одна сущность Book(id_book, name) ). Шаблон для Read записи показывает имя книги и позволяет удалить книгу.

В контроллере Symfony2 я использую createFormBuilder() который создает объект формы удаления, к которому применяется createView() . Объект, возвращаемый последним, используется form_widget() в движке шаблона (Twig). В конце:

 <div id="bookName">{{book.name}}</div> <div id="bookDelete"> <form action="{{ path('book_delete', { 'id': book.id }) }}" method="post"> <input type="hidden" name="_method" value="DELETE" /> {{ form_widget(delete_form) }} <button type="submit"></button> </form> </div> 

Который вернется:

 <div id="bookName">Symfony2 In Depth</div> <div id="bookDelete"> <form action="/web/app_dev.php/deletes" method="post"> <input type="hidden" name="_method" value="DELETE"> <div id="form"> <input type="hidden" id="form_id" name="form[id]" value="15"> <input type="hidden" id="form__token" name="form[_token]" value="dd6573ae916ae30f78ba35a8c67e5d42a2764c1c"> </div> <button type="submit"></button> </form> 

То, что я представляю себе при перемещении шаблона в front-end, является окончательным JSON с сервера, похожим на:

 { 'id':15, 'name': 'Symfony2 in Depth', 'csrf_token' : 'dd6573ae916ae30f78ba35a8c67e5d42a2764c1c' } 

Вопрос в том, как реализовать один и тот же внутренний механизм Symfony2 для рендеринга токена csrf для формы DELETE, как часть окончательного JSON для чтения объекта книги? Допустимо ли избавляться от {{ form_widget(delete_form) }} и всех его длинных объектов и только сериализовать токен csrf с именем книги? На что это повлияет? Я чувствую, что это хорошо для производительности, но как?

Ваше обычное руководство очень ценится.

Related of "Сериализация данных FormView в JSON"

Вы можете создать твиг-файл примерно так:

 { 'id': '{{ form.id.vars.value }}' 'name': '{{ form.name.vars.value }}' 'csrf_token': '{{ form._token.vars.value }}' } 

В любом случае, я не рекомендую использовать токен csrf при использовании API, лучше отключить его. Если вы хотите отключить для всех приложений в config.yml:

 framework: csrf_protection: enabled: false 

Или просто для одной формы в форме типа add:

 public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'csrf_protection' => false, )); }