0

我正在使用 Symfony 4 和 Nelmio Api Doc Bundle 创建一个只能通过 API 访问的服务(公共前端和私人后台都将使用 JS 框架创建)

我需要 2 份文件(以后可能会更多):

  • /api/doc
  • /管理员/文档

现在我在 src/Controllers/Admin 和 src/Controller/API 中有一些控制器,因为它们确实不同。

我不明白如何使用 Nelmio Api Doc Bundle 来处理 2 个不同 url 中的 2 个文档。我知道有一些区域,但我只是不知道如何处理它们......

有人可以通过提供一个简单的例子来帮助我吗?

谢谢

4

1 回答 1

3

正如您所提到的,您需要配置 nelmio_api_doc.yaml 文件的区域部分,如下所示https://symfony.com/doc/current/bundles/NelmioApiDocBundle/areas.html

在您的情况下,您将拥有包 nelmio_api_doc.yaml 文件,如下所示:

nelmio_api_doc:
    areas:
        default:
            path_patterns: [ ^/api ]
        admin:
            path_patterns: [ ^/admin ]

或者无论您的路线中的模式是什么,它都知道要检查哪些控制器功能来检查招摇注解。

在您的路由配置 nelmio_api_doc.yaml 中:

app.swagger_ui:
path: /doc/{area}
methods: GET
defaults: { _controller: nelmio_api_doc.controller.swagger_ui, area: api }

因此 api 文档将可以通过 /doc 或 /doc/api 访问,任何其他区域都可以通过添加附加区域名称来访问,例如 /doc/admin 等。

请注意,我已将路由设置为 /doc/ 以防止与为 ^/api 设置的防火墙模式冲突,因为它可能会发生冲突,您可以添加一个额外的防火墙规则来首先捕获它,我决定只是更改这条路线。如果您将 swagger ui 路由作为 /api/doc 使用,则需要将默认区域路径模式更改为:

path_patterns: [ ^/api(?!/doc$) ] 

如 symfony 文档中所示。

于 2020-04-05T20:52:43.060 回答