Ich möchte Entity mit "PATCH" -Methode aktualisieren (nur die Felder aktualisieren, die übermittelt wurden).FOSRestBundle - PATCH funktioniert nicht wie sollte
/* Edit an existing Content entity.
*
* @Rest\Patch(
* "/{content}.{_format}",
* requirements={"content" = "\d+"},
* defaults = { "_format" = "json" }
*)
*
* @Rest\View(serializerGroups={"user""admin"})
* @param Content $content
* @return View
* @throws \NotFoundHttpException*
*
* @ApiDoc(
* resource="/api/content/",
* description="Updates content data",
*
* input="ContentBundle\Form\ContentType",
*
* output={
* "class"="EntriesBundle\Entity\Content",
* "parsers"={"Nelmio\ApiDocBundle\Parser\JmsMetadataParser"},
* "groups"={"user","admin"}
* }
*)
*/
public function editAction(Request $request, Content $content)
{
if (!$content) {
throw $this-createNotFoundException();
}
$editForm = $this-createForm('ContentBundle\Form\ContentType', $content);
$editForm-submit($request-request-get($editForm-getName()));
$view = View::create()
-setSerializationContext(SerializationContext::create()-setGroups(['user']));
if ($editForm-isSubmitted() && $editForm-isValid()) {
$em = $this-getDoctrine()-getManager();
$em-persist($content);
$em-flush();
$view
-setStatusCode(Codes::HTTP_OK)
-setTemplate("ContentBundle:content:show.html.twig")
-setTemplateVar('contents')
-setData($content);
} else {
$view
-setStatusCode(Codes::HTTP_BAD_REQUEST)
-setTemplateVar('error')
-setData($editForm)
-setTemplateData(['message' = $editForm-getErrors(true)])
-setTemplate('ContentBundle:content:show.html.twig');
}
return $this-get('fos_rest.view_handler')-handle($view);
}
Form:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class)
->add('description', TextareaType::class)
->add('eng', CheckboxType::class, [
'required' => false
]);
}
Ich habe Einheit mit 'eng' auf TRUE
. Wenn ich Abfrage ausführen, um nur title
Feld zu aktualisieren, ändert sich eng
zu false
. und description
zu null. Irgendwelche Ideen warum?
Wenn ein Patch Anfrage mit, möchten Sie 'false' als zweites Argument übergeben zu 'Form :: submit()', damit fehlende Eigenschaften nicht gelöscht werden. – xabbuh
Wenn Sie Ihren Booleschen Wert mit PATCH auf "Falsch" setzen, funktioniert er möglicherweise nicht. Siehe diese Frage für weitere Details und Lösung: http://StackOverflow.com/Questions/35187867/SYMFONY3-how-to-update-Boole-an-false-using-Patch-Method – Roubi