【发布时间】:2016-06-18 21:54:36
【问题描述】:
我目前正在使用 Symfony 框架构建 API。我已经完成了足够的阅读以了解如何使用序列化组件,并为我的实体构建了一些自定义规范化器。它目前的工作方式是:
JSON -> 数组(解码)-> 用户实体(非规范化)
只要请求内容是用户的 JSON 表示,这就是有效的查找,例如:
{
"email": "demouser@email.com",
"plainPassword": "demouser",
"first_name" : "Demo",
"last_name" : "User"
}
在我的控制器中使用以下代码创建用户实体:
$newuser = $this->get('api.serializer.default')->deserialize($request->getContent(), WebsiteUser::class, 'json');
但是,我想将用户 JSON 嵌套在 JSON 对象的“数据”属性中,这将允许消费者在请求中传递额外的元数据,例如:
{
"options": [
{
"foo": "bar"
}
],
"data": [
{
"email": "demouser@email.com",
"plainPassword": "demouser",
"first_name": "Demo",
"last_name": "User"
}
]
}
这导致的主要问题是反序列化不成功,因为 JSON 格式发生了变化。
到目前为止,我考虑的唯一解决方案是 json_decode 整个请求正文,获取该数组的“数据”元素,并将数据元素的内容传递给反规范化器(而不是反序列化器)。
有没有更好的方法来解决这个问题?
【问题讨论】: