我正在尝试在Api平台上创建自定义操作/控制器/操作。
基本上,我需要一个以Swagger记录的自定义操作,但不需要ApiResource
,因为该操作接收的JSON主体在数据库中没有相应的实体。
身体看起来像这样:
[
{
"someEntityId": "2",
"message": "test message",
"userId": "11"
},
{
"someEntityId": "8",
"message": "test message two",
"userId": "16"
}
]
正如我所说,我不能拥有ApiResource
,因为那样会破坏REST原则,并且不存在具有这些字段的实体。我正在使用这些数据执行一些自定义业务逻辑,并且将此JSON反序列化为DTO
,以精确地收集DTOs
。
具有路由功能的常规Symfony控制器应该是必经之路,至少我认为,但是即使有控制器注释,我也无法在Swagger
中显示此路由。
我已经尝试过了:
/**
* @Route(
* methods={"POST"},
* name="api_post_notify_users",
* path="/api/users/notify_users",
* )
* @SWG\Post(
* path="/api/users/notify_users",
* summary="Summary",
* description="Description",
* produces={"application/json"},
* @SWG\Response(
* response=200,
* description="Success",
* )
* )
* @return Response
*/
public function __invoke()
{
$data = $this->get('request_stack')->getCurrentRequest()->getContent();
return new Response($data);
}
不确定我想念的是什么。另外,还有一种方法可以针对DTO
验证此JSON数组,以确保发送JSON中的所有字段。
非常感谢您的帮助!
答案 0 :(得分:0)
使用所有字段创建响应的DTO,然后使用symfony序列化器反序列化。然后,您可以调用Symfony验证程序或创建的每个DTO,并相应地返回响应。