3

我正在使用 Ember.js 和 Ember-data 为 UI 和 Symfony2、FOSRestBundle 和 JMS Serializer 为后端 JSON API 构建一个项目。JMS Serializer 总是在其输出中嵌入嵌套模型,但 Ember-data要求模型是侧面加载的。我在任何地方都找不到将 JMS 序列化器配置为侧载模型而不是嵌入模型的示例。

当然,我可以只在 Ember-data 端编写一个适配器来转换结果,但我想获得侧加载数据的好处,而不仅仅是解决 JMS 序列化器中的(潜在)限制。

这就是我所说的嵌入模型数据的意思,这就是JMS-Serializer 现在所做的

{
  "post": {
    "id": 1,
    "name": "Test Post",
    "comments": [
      {
        "id": 1,
        "comment": "Awesome post, man!"
      }, {
        "id": 2,
        "comment": "Yeah, what he said."
      }
    ]
  }
}

这就是我所说的侧面加载模型数据的意思,这就是我想要的:

{
  "post": {
    "id": 1,
    "name": "Test Post",
    "comments": [1, 2]
  },
  "comments": [
    {
      "id": 1,
      "comment": "Awesome post, man!"
    }, {
      "id": 2,
      "comment": "Yeah, what he said."
    }
  ]
}

有谁知道实现我想要的配置?或者有人在 JMS-Serializer 中实现了这个功能吗?

4

2 回答 2

4

我已经实现了一个自定义 JSON 序列化访问者类,该类将为嵌入式对象加载数据,而不是对它们进行内联编码。该课程可以在 GitHub 上找到

示例用法:

$visitor = new SideLoadJsonSerializationVisitor(
    new SerializedNameAnnotationStrategy(new CamelCaseNamingStrategy()));

$serializer = SerializerBuilder::create()
    ->setSerializationVisitor('json', $visitor)
    ->build();

echo $serializer->serialize(array('myClass' => $myClass), 'json');

或者您可以通过覆盖 JSON 序列化访问者类在 Symfony2 项目中使用它

parameters:
    jms_serializer.json_serialization_visitor.class: 'Acme\MyBundle\Serializer\SideLoadJsonSerializationVisitor'
于 2014-03-24T23:45:54.750 回答
1

有一个捆绑包支持更多功能,例如异步加载和一些更灵活的实现和安全功能。

https://github.com/UniqueLibs/ember-data-serializer-bundle

于 2015-05-29T13:31:36.900 回答