Я работаю над Symfony 2 WebApp, который предоставляет веб-сервис JSON для связи с мобильными приложениями на разных платформах (iOS, Android и т. Д.).Symfony2 + FOS RestBundle: фильтровать/очищать запрос JSON перед применением ParamConverter
WebApp использует FOS RestBundle для обработки и десериализаций полученных данных в формате JSON:
# app/config/config.yml
sensio_framework_extra:
request: { converters: true }
fos_rest:
...
body_converter:
enabled: true
/**
* Sync Controller implementation
* @ParamConverter("post", converter="fos_rest.request_body")
*/
public function syncAction(SyncBag $syncBag) {
// ...
}
/**
* Sync Data Wrapper
*/
public class SyncBag {
...
/**
* @JMS\Type("DateTime<'Y-m-d'>")
*/
private $startDate;
}
Это работает очень хорошо. Проблема: Некоторые из мобильных приложений используют неправильный формат даты для отправки некоторых данных. Хотя WebApp ожидает «Y-m-d», мобильные приложения отправляют «Y-m-d H: i: s». Это приводит к исключению:
Uncaught РНР Исключение Symfony \ Component \ HttpKernel \ Исключение \ BadRequestHttpException: "Недопустимый DateTime "2016-03-04 12:00:00", ожидаемый формат Y-м-д." в /.../vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/Request/AbstractRequestBodyParamConverter.php линии 113
Конечно обновления мобильных приложений для использования/отправки правильный формат даты является правильным решение этой ошибки. Но реализация и публикация этого исправления займет довольно много времени. Прохождение обзора яблок займет некоторое время. Ожидание обновления пользователями последней версии займет некоторое время. И так далее.
С другой стороны, проблему можно было бы легко решить, обновив процесс десериализации в WebApp.
Вопрос: ли это как-то можно подключить к процессу десериализации внутри FOS RestBundle ParamConverter? Если бы я мог фильтровать/очищать запрос (простой поиск/замену неправильных форматов дат), прежде чем данные будут обрабатываться конвертером, проблема может быть решена в течение нескольких минут.
Любая идея/предложение, как это сделать?
Спасибо!