SF 使用 ParamConverter 删除不需要的 json 输入

SF remove unwanted json input with ParamConverter

是否可以将 ParamConverter 与 json 输入一起使用并删除不需要的字段?

在我的实体文件夹中,我有字段名称(字符串)和创建时间(日期时间)。我不希望发送新文件夹的用户选择 createdAt 的值。

json 输入:

{
  "name": "F name",
  "createdAt": "01/02/03"
}

应仅使用名称保存实体。

如何忽略字段 createAt(或任何不需要的输入)?

/**
 * @Rest\Post("/folder")
 * @Rest\View(StatusCode = 201)
 * @ParamConverter(
 *     "folder",
 *     converter="fos_rest.request_body",
 *     options={
 *        "validator"={ "groups"="Create" }
 *     }
 * )
 *
 */
public function createAction(Folder $folder, ConstraintViolationList $violations)
{
    if (count($violations)) {
        return $this->view($violations, Response::HTTP_BAD_REQUEST);
    }

    $em = $this->getDoctrine()->getManager();
    $em->persist($folder);
    $em->flush();

    return $folder;
}

您可以使用 Request 从 JSON 对象中选择您想要使用的项目。

use Symfony\Component\HttpFoundation\Request;

public function createAction(Folder $folder, ConstraintViolationList $violations, Request $request)
{
    $name = $request->request->get('name');
    #do whatever you want with $name now ...

    if (count($violations)) {
        return $this->view($violations, Response::HTTP_BAD_REQUEST);
    }

    $em = $this->getDoctrine()->getManager();
    $em->persist($folder);
    $em->flush();

    return $folder;
}

我做到了!

我使用 JmsSerializer 组。

/**
 * @Rest\Post("/folder")
 * @Rest\View(StatusCode = 201)
 * @ParamConverter(
 *     "folder",
 *     converter="fos_rest.request_body",
 *     options={
 *        "validator"={ "groups"="create" },
 *        "deserializationContext"={"groups"={"folder_create"}}
 *     }
 * )
 *
 */