具有自定义JSON正文的Api Platform自定义控制器

时间:2018-12-11 09:05:14

标签: symfony swagger swagger-ui api-platform.com

我正在尝试在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中的所有字段。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用所有字段创建响应的DTO,然后使用symfony序列化器反序列化。然后,您可以调用Symfony验证程序或创建的每个DTO,并相应地返回响应。