我正在构建一个项目,包括用于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中实现了此功能?
答案 0 :(得分:4)
我已经实现了一个自定义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序列化访问者类在Symfony2项目中使用它
parameters:
jms_serializer.json_serialization_visitor.class: 'Acme\MyBundle\Serializer\SideLoadJsonSerializationVisitor'
答案 1 :(得分:1)
有一个捆绑包支持更多功能,如异步加载和一些更灵活的实现和安全功能。