symfony - 如何使用 JMS Serializer 和 Symfony2 实现模型侧加载

标签 symfony serialization ember.js jmsserializerbundle jms-serializer

我正在使用用于 UI 的 Ember.js 和 Ember-data 以及用于后端 JSON API 的 Symfony2、FOSRestBundle 和 JMS Serializer 构建一个项目。 JMS Serializer 始终在其输出中嵌入嵌套模型,但 Ember-data requires that the models are side-loaded 。我在任何地方都找不到配置 JMS Serializer 来侧面加载模型而不是嵌入它们的示例。

当然,我可以 write an adapter on the Ember-data side to transform the result ,但我希望获得侧面加载数据的好处,而不仅仅是解决 JMS Serializer 中的(潜在)限制。

这就是我所说的嵌入模型数据,这就是 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-Serialiser 中实现了此功能吗?

最佳答案

我实现了一个自定义 JSON 序列化访问者类,它将旁加载嵌入对象的数据,而不是内联编码。该类可以是found on GitHub here .

用法示例:

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

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

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

或者您可以通过覆盖 JSON Serialization Visitor 类在 Symfony2 项目中使用它

parameters:
    jms_serializer.json_serialization_visitor.class: 'Acme\MyBundle\Serializer\SideLoadJsonSerializationVisitor'

关于symfony - 如何使用 JMS Serializer 和 Symfony2 实现模型侧加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261499/

相关文章:

entity-framework - 使用 KnpLabs 的 SoftDeletable 时强制删除学说实体

command-line-interface - 如何在 Symfony2 中使用 php 控制台

c++ - 如何可移植(反)序列化 qint32?

javascript - Tornado 网络服务器和 Ember.js

javascript - Handlebars 预编译模板返回未定义的值

rest - FOS 休息包 : unable to find template

symfony2.8 的 php_apcu.dll 扩展推荐 xampp 上的 php 加速器

c++ - 文件解析中奇怪的对象序列化问题

ruby-on-rails - rails : Serializing objects in a database?

javascript - 观察子 Controller 的属性