微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 NelmioApiDocBundle 4.x 的模型中注释多态变量

如何解决如何在 NelmioApiDocBundle 4.x 的模型中注释多态变量

我的模型如下所示:

use Symfony\Component\Serializer\Annotation\Groups;
use OpenApi\Annotations as OA;

class ResponseBodyModel extends AbstractModel
{
    /**
     * @var AbstractModel
     * @Groups({"comment_list","comment_create"})
     */
    private AbstractModel $data;
    
    public function setData( AbstractModel $data ): self
    {
        $this->data = $data;
        return $this;
    }
    public function getData(): AbstractModel
    {
        return $this->data;
    }
    //+ some other parameters
}

class CommentModel extends AbstractModel {
 //parameters for comments (ID,content,usermodel,etc.) 
 //with @Groups({"comment_create","comment_list"})
}
class CollectionModel extends AbstractModel {
     /**
      * @var CommentModel[]
      * @Groups ({"comment_list"})
      */
     private array $comments = [];
}

控制器中的代码

use OpenApi\Annotations as OA;
class DefaultController
{
    /**
     * @Route("/comment",methods={"POST"})
     * @OA\Response (
     *     response=200,*     description="Return newly added comment",*     @OA\JsonContent(
     *          ref=@Model(type=ResponseBodyModel::class,groups={"comment_create"})
     *     )
     * )
     */
    public function create()
    {
        $commentModel = new CommentModel();
        $this->responseBodyModelService->initialize($commentModel);
    }
    /**
     * @Route("/comments",methods={"GET"})
     * @OA\Response (
     *     response=200,*     description="Return list of comments",groups={"comment_list"})
     *     )
     * )
     */
    public function list()
    {
        $collectionModel = new CollectionModel();
        $collectionModel->initialize($arrayOfCommentsModels);
        $this->responseBodyModelService->initialize($collectionModel);
    }
}

在这种情况下,NelmioApiDocBundle 将生成

{
  "data": {},"status": "string"
}

因为 ResponseBodyModel::$data 上的注释是 @var AbstractModel(我知道这一点)

我如何为参数 ResponseBodyModel::$data 编写注释以根据集合组选择正确的类模型:

  • 当我设置@group comment_create - 选择 CommentModel::class
  • 当我设置@gropu comment_list - 选择 CollectionModel::class

在 NelmioApiBundle 的文档中与此无关 https://symfony.com/doc/4.x/bundles/NelmioApiDocBundle/index.html

我也没有在 https://swagger.io/specification/ 上找到任何关于此的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。