我正在使用用于 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/