#forms #rest #symfony #post #jmsserializerbundle
#формы #rest #symfony #Публикация #jmsserializerbundle
Вопрос:
Насколько я правильно понимаю, десериализация JMSSerializerBundle выполняется так же, как и у компонента symfony form, когда контроллер получает запрос post / put / patch?
Итак, либо я создаю пользовательский FormType symfony, например, для UserType, и когда я получаю запрос, я делаю что-то вроде $form-> handleRequest($ request), либо я использую JMSSerializerBundle для отмены сериализации запроса к документу / сущности, который в конечном итоге сохраняется.
Есть ли у кого-нибудь опыт работы с обоими методами? В настоящее время я знаком только с формой… Какой из них мне выбрать?
Приложение, о котором я говорю, является чисто Restful, в нем нет html-шаблонов twig, а FOSRestBundle выполняет всю маршрутизацию RESTful.
Комментарии:
1. У меня точно такая же проблема. Должен ли я использовать компонент сериализатора или компонент формы для обработки POST / PUT? Кажется, сериализатор больше подходит для REST?
Ответ №1:
В нашем restfull API мы обычно используем компонент Symfony Serializer для обработки десериализации объектов, затем компонент Symfony Validator, чтобы убедиться, что объекты выполняют все требуемые условия, прежде чем отправлять / обновлять их в базе данных. Работает довольно хорошо, легче, чем компонент form.
В любом случае компонент Form не сможет десериализовать json / xml, поэтому вам придется использовать сериализатор.
Комментарии:
1. Звучит вполне осуществимо. Когда я вызываю «$form-> handleRequest($request)», это, наконец, JMSSerializerBundle, который заботится о десериализации данных в запросе?
2. по этой ссылке приведен хороший пример использования, который объясняет все, что вам нужно (код состояния, сериализация ошибок, …) Он использует компонент form после отмены сериализации объекта, но, как мы обсуждали выше, вы можете напрямую использовать компонент validator вместо этого для простых случаев.
Ответ №2:
Преимущество компонента Symfony Form перед сериализатором JMS заключается в том, что проверка выполняется перед десериализацией, что соответствует строгой типизации PHP 7. Примерный случай — вы передаете массив вместо строки, JMS создает объект and, а средство получения выдает TypeError
вместо ошибки проверки от средства проверки.
Комментарии:
1. Кроме того, обработка загрузок в формате JSON для FormComponent может быть выполнена путем преобразования
php://input
вRequest
object. Вы можете посмотреть обработчик запросов FOSRestBundle, который делает это за вас, когда включен в Symfony framework. Преимущество этого заключается в обработке запросов на ИСПРАВЛЕНИЕ (что в первоначальном ответе было непросто сделать) и обеспечении прохождения запросов любого типа (как простые формы, так и запросы JSON все равно будут работать).