【发布时间】:2018-04-01 16:37:48
【问题描述】:
我正在尝试处理这个问题: 我的应用程序发送 JSON POST 请求,其中包含在 Json 中编码的多个信息。示例:
{"UserInfoA":{"1":123,"2":"hello","3":"bye","4":{"subinfo":1,"subinfo2":10}},
"UserInfoB":{"a":"12345678","b":"asd"}} // and so on...
每个 UserInfo 都有:
- 它自己的实体(尽管某些请求可能包含多个实体的信息)。
- 控制器将此对象持久保存在 DB 上,然后返回此 DB 上的 ID。
所以,为了解决这个问题,我做了另一个控制器,比如 JsonHandler,它接收这个请求,然后在把这个 JSON 转换成不同的对象后转发给每个控制器。示例:
public function getJson (Request $request){
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$data = json_decode($request->getContent(), true);
}
if (!isset($data['UserInfoA'])){
return new JsonResponse('ERROR');
}
$uia = $data['UserInfoA'];
$idInfoA = $this->forward('Path::dataAPersist',array('data'=>$uia));
}
// same with userinfoB and other objects
return $idInfoA ;
这很完美,但它正确吗?我应该改用服务吗?
编辑:我需要在 Json 中响应 ID,并且 this->forward 返回一个响应,所以我不能使用 JsonResponse,如果直接发送 $idInfoA 只是发送 IDNUMBER 而不是 JSON,我该怎么做吗?
总结:一个Json监听器,接收信息,处理它,然后分派到相应的控制器。这个监听器,应该是控制器、服务还是其他东西?
【问题讨论】:
-
嗯,这太宽泛了。你应该改写这个问题。清楚地描述你希望你的代码做什么。
-
我想要一个模块来处理 JSON 请求,然后将每个对象(在处理 JSON 请求后获得)发送到已经存在的控制器来处理这个对象并保存在数据库中。所以我制作了另一个控制器,它有 getJson 方法来执行此操作,然后在每个控制器中调用相应的方法。
-
例如看看 Symfony Serializer、JMS 和 FOS RestBundle
标签: php json symfony service forward