Symfony2 REST API – частичное обновление

Я создаю REST API с FOSRestBundle в Symfony2. Я использую формы для создания и обновления объектов с помощью Doctrine2. Все работает нормально, если я отправляю все поля формы. Пример:

{"first_name":"Pi","last_name":"Wi"} 

Человек вставлен нормально, но теперь я хочу обновить только фамилию.

 {"last_name":"Wi"} 

Проблема в том, что после обновления первое имя пуст, потому что форма обновляет объект с «нулевым» значением (потому что он не указан). Можно ли просто обновить фамилию и игнорировать первое имя?

Конечно, это возможно.

Во-первых, с точки зрения RESTful, который будет запросом PATCH , поэтому, если вы используете ClassResourceInterface контроллера на основе ClassResourceInterface , вам придется добавить метод patchAction в ваш контроллер.

Затем, при обработке представленной формы, вам необходимо передать false опцию $clearMissing для вызова метода отправки формы в контроллере, например:

 <?php // in your controller's patchAction: /** @var \Symfony\Component\Form\FormInterface $form */ /** @var \Symfony\Component\HttpFoundation\Request $request */ $form->submit($request, false); 

Это покажет компоненту формы только обновление полей, переданных из формы, без очистки отсутствующих полей (как говорит имя параметра). См. Исходный код для справки.

Обратите внимание, однако, что передача Request на FormInterface::submit() будет устаревать с Symfony 3.0, поэтому этот ответ предназначен для Symfony 2.x.