Symfony 4.2和Nelmio Api Doc Bundle-具有多个控制器的多个文档

时间:2019-05-06 12:28:15

标签: api symfony symfony4 nelmioapidocbundle

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

我需要2个文档(可能以后再介绍):

  • / api / doc
  • / admin / doc

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

我不明白如何使用Nelmio Api Doc Bundle处理2个不同URL中的2个文档。我知道有些地方,但是我不知道该如何处理...

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

谢谢

1 个答案:

答案 0 :(得分:0)

正如您提到的那样,您需要配置nelmio_api_doc.yaml文件的area部分,如此处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 }

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

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

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

如symfony文档中所示。