Symfony Restful Post: JMSSerializerBundle против компонентов формы Symfony
Насколько я понимаю, правильно десериализация JMSSerializerBundle делает то же самое, что и компонент формы Symfony, когда контроллер получает запрос post/put/patch?
Так что я либо создаю пользовательский formType для Symfony, например, для UserType, и когда я получаю запрос, я делаю что-то вроде $form->handleRequest($request), либо я использую JMSSerializerBundle, чтобы десериализовать запрос к документу / сущности, который в итоге сохраняется.
У кого-нибудь есть опыт работы с обоими методами? В настоящее время я знаком только с формой... Какой из них выбрать?
Приложение, о котором я говорю, чисто Restful, там нет html-шаблонов для веток, и FOSRestbundle выполняет всю RESTful-маршрутизацию.
2 ответа
В нашем restfull API мы обычно используем компонент Symfony Serializer для обработки десериализации сущностей, затем компонент Symfony Validator, чтобы гарантировать выполнение сущностями всех необходимых условий перед их отправкой / обновлением в базе данных. Работает довольно хорошо, легче, чем компонент формы.
В любом случае, компонент Form не сможет десериализовать json/xml, поэтому вам придется использовать сериализатор.
Преимущество компонента Symfony\Form по сравнению с JMS Serializer заключается в том, что проверка выполняется перед десериализацией, что соответствует строгой типизации PHP 7. Пример случая - вы передаете массив вместо строки, JMS создает и возражает, а геттер вызывает \TypeError
вместо ошибки валидации от валидатора.