Symfony采用JSON数据和填充实体的推荐方法是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony采用JSON数据和填充实体的推荐方法是什么?相关的知识,希望对你有一定的参考价值。
如果我在请求中接收JSON数据(比如API类型接口),那么Symfony建议填充实体的方式是什么。在我看来,选项是:
- 使用表单组件 - 将解码后的JSON作为数组传递给
submit()
方法。 - 使用序列化程序进行反序列化。
在我看来,使用序列化程序的问题是你需要手动进行数据转换(和验证,虽然简单)。
使用表单组件会感觉有点hacky,并且还使用了许多未触及/需要的功能。
是否有其他选项(内置于Symfony或其他捆绑包/包中)?或者是推荐的方式之一?
(我意识到这至少部分是基于意见的问题...)
答案
正如你所提到的 - 这是一个很容易解决的问题。您一直在考虑的选项是处理它的两种常用方法:
- 只需使用
Form
组件 - 需要创建一个FormType,增加一些性能开销(在大多数情况下并不重要)。作为奖励 - 它为您提供所有表格特权,例如不允许额外字段,使用表格事件等的能力。 - 使用
Serializer
+Validator
- 在使用的组件方面是一个“瘦”选项,更冗长一点,没有表格特权
我要说使用表单一次性处理反序列化和验证确实没有错。
看看下面的示例操作代码。请注意,它使用FOSRestBundle
View
类来处理响应。它只接受一个json编码的实体数据,并根据它创建一个新实体或更新现有实体。
public function sampleAction(SampleEntity $sampleEntity, Request $request) {
//Is it a new or existing entity?
$statusCode = $sampleEntity->getId() ? 200 : 201;
//Load our form with the entity provided by the route loader
$form = $this->createForm(SampleEntityType::class, $sampleEntity);
//Decode the actual input and make Form component to populate an entity for us
$formData = json_decode($request->getContent(), true);
$form->submit($formData);
//Validation is as simple as this
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($sampleEntity);
$em->flush();
return View::create($form, $statusCode);
}
return View::create($form->getErrors(true, false), 400);
}
以上是关于Symfony采用JSON数据和填充实体的推荐方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章