Symfony Serializer在反序列化

时间:2017-04-11 09:24:56

标签: php symfony serialization

我正在尝试序列化然后反序列化Symfony 3中的Doctrine实体。当然,它对id属性不起作用,因为默认情况下没有id的公共访问者。那么最好的选择是什么?

  1. 添加setId()方法,但这可能是一个坏主意 破坏了学说的默认行为。

  2. 使用使用反射构建的自定义Normalizer 通过访问该字段来对象。

  3. 为实体提供一些自定义toArray()fromArray()功能,并使用数组值代替序列化中的对象。

  4. 或者我错过了什么?是否已经为symfony构建了该用例?

2 个答案:

答案 0 :(得分:0)

This可能是您正在寻找的内容?我最近开始研究它。

答案 1 :(得分:0)

您可以使用object_to_populate选项:

    // retrieve entity to update from DB
    $oldProduct = $this->getDoctrine()->getRepository(Product::class)->find($request->request->get('id'));

    $product = $this->get('serializer')->deserialize($request->getContent(), Product::class, 'json', array('object_to_populate' => $oldProduct));

    $entityManager = $this->getDoctrine()->getManager();
    $entityManager->persist($product);
    $entityManager->flush();

请参见Deserializing in an Existing Object documentation