Я создаю API, используя Symfony2, Doctrine и FOSRestBundle. Я хотел бы использовать компонент форм для проверки запросов API, которые создают или изменяют записи, и у меня есть несколько проблем. Я использую компонент проверки самостоятельно, но хотел бы перейти к использованию компонента форм, поскольку он перемещает всю логику проверки из контроллера, лучше обрабатывает привязку данных запроса к моим объектам и лучше объединяет сообщения об ошибках.
Проблемы, с которыми я сталкиваюсь, связаны с полями, которые не требуются, либо когда запись создается с помощью POST, либо когда она обновляется с помощью PUT. В идеале я бы хотел, чтобы необязательные поля вообще не нужно было отправлять через HTTP, но это приводит к сбою проверки формы. Например, одно из полей сущности, которую я использую, — это поле DateTime с именем endTime, и это не требуется. Если параметр с именем endTime отсутствует в запросе POST или PUT, Symfony2 привязывает значение null из запроса к полю. Когда это преобразуется в экземпляр DateTime, он преобразуется в текущую дату и время, а это совсем не то, что я хочу.
Есть ли способ сказать Symfony не привязывать значения к объекту, если они не существуют в HTTP-запросе? Это по-прежнему должно быть безопасным, поскольку проверка все равно не удастся на основе аннотаций в классе сущностей. Я мог бы переопределить метод привязки, но это кажется большой работой...
Спасибо за любые идеи.
FormType
s, [input="Your\Namespace\Form\Type\YourType"
] — просто не добавляйте ненужные поля в методbuildForm()
. - person moonwave99   schedule 22.09.2012