3

有没有办法关闭所有 Nelmio Swagger UI 文档?在生产中,我希望外界在以下 URL 中看不到任何内容,但在开发中,它们应该正常显示有用的文档和沙箱:

似乎在 Nelmio 配置中应该有一个简单的开关,但我还没有找到它。我的公司正在使用 Symfony 中的 Nelmio API Doc 包为非公共 API 开发 API。API 服务器向公众公开,但我们对向全世界发布其使用情况不感兴趣。

4

4 回答 4

4

@gp_sflover 的评论让我走上了正确的道路,但它不仅仅是在 prod in 上禁用 NelmioApiDocBundle AppKernel.php。引用 Nelmio 的配置和路由将产生错误,直到您将它们移动到特定于开发的文件中。以下更改app/AppKernel.php是第一步:

public function registerBundles()
{
    $bundles = [
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        ...
        // new Nelmio\ApiDocBundle\NelmioApiDocBundle(), // <-- REMOVED FROM HERE
        new Nelmio\CorsBundle\NelmioCorsBundle(),
        new AppBundle\AppBundle(),
    ];

    if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
        $bundles[] = new Nelmio\ApiDocBundle\NelmioApiDocBundle(); // <-- ADDED HERE
        $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
        ...

为了消除配置错误,我不得不将以下内容移出app/config/config.yml和移入config_dev.yml

# nelmio Configuration
nelmio_api_doc:
    sandbox:
        enabled: true
    name: 'DLAP API Bridge'
    swagger:
        ...
    cache:
        enabled: false

同样,以下内容来自app/config/routing.yml并移至routing_dev.yml

NelmioApiDocBundle:
    resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
    prefix:   /api/doc

nelmio_api_swagger:
    resource: "@NelmioApiDocBundle/Resources/config/swagger_routing.yml"
    resource: null
    prefix: /api-docs
于 2016-11-08T20:48:33.497 回答
1

不加载 config/bundles.php 中的包会在带有NelmioApiDocBundle 版本 3的Symfony 4.3中引发异常:

There is no extension able to load the configuration for "nelmio_api_doc" 

我最终在环境中使用重定向禁用了 api 文档的路由,需要禁用(prod):

#config/routes/prod/nelmio_api_doc.yaml
app.swagger:
    path: /api/doc.json
    methods: GET
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /
        permanent: true

app.swagger_ui:
    path: /api/doc
    methods: GET
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /
        permanent: true
于 2019-11-26T13:22:20.390 回答
1

为了在特定环境中禁用 Nelmio api-doc-bundle,经过一番调查,我最终做了以下事情:

  • 仅在您的目标环境中启用捆绑包,即project/config/bundles.php
Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['dev' => true]
  • 将配置注释放在特定于 env 的地方(放在nelmio_api_doc.yaml里面./config/packages/dev/
  • 把路由文件nelmio_api_doc.yaml放在里面./config/routes/dev(而不是放在里面./config/routes),否则,如果你为另一个没有加载包的环境调用路由,而不是 404,你会看到 500)
于 2021-03-04T10:05:10.833 回答
1

现在使用 symfony4 和 flex 你可以正常安装包

composer require nelmio/api-doc-bundle

(所以它不会被设置为require-dev你的依赖composer.json

现在您将设置更改project/config/bundles.php为:

Nelmio\ApiDocBundle\NelmioApiDocBundle::class => ['dev' => true]

所以你不会得到错误(例如来自注释),但它不会从Kernel.php

于 2019-04-08T10:27:11.257 回答