php - Symfony Serializer 无法在反序列化时处理 Doctrine Id

标签 php symfony serialization

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

  • 添加 setId()方法,但这可能是个坏主意
    破坏了学说的默认行为。
  • 使用自定义 Normalizer使用反射来构造
    对象,只需访问该字段。
  • 给实体一些自定义 toArray() , fromArray()功能并在序列化中使用数组值而不是对象。

  • 或者我错过了什么? symfony 中是否已经为该用例构建了一些东西?

    最佳答案

    您可以使用 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

    关于php - Symfony Serializer 无法在反序列化时处理 Doctrine Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43341843/

    相关文章:

    PHP HTML : mysql data as table row

    php - 在 mysql 中获取多条记录并将其存储到 json 数组中显示在 HTML 表单个字段中

    php - Doctrine2 架构设计 - 带有补充数据的实体

    c++ - 将结构写入和读取文件

    java - 逐行读取序列化文件中的内容

    javascript - AJAX 响应,未定义(在控制台普通 JSON 中)

    php - 根据当前日期获取记录

    forms - 使用 symfony2 日期时间月份下拉列表的字符串

    php - Symfony2 chain_provider in_memory 用户登录 "bad credentials"

    c# - 跨 .Net 平台序列化 TypeInfo/Type