如何在生产中禁用Nelmio UI?

时间:2016-11-08 19:40:37

标签: symfony swagger nelmioapidocbundle

有没有办法关闭所有Nelmio Swagger UI文档?在制作中,我希望外面的世界看不到以下网址,但是在开发中他们应该显示有用的文档&沙箱正常:

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

4 个答案:

答案 0 :(得分:2)

@ gp_sflover的评论让我走上了正轨,但还有更多内容,而不仅仅是在AppKernel.php中禁用NelmioApiDocBundle。配置&引用Nelmio的路由会产生错误,直到您将它们移动到特定于dev的文件中。 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

答案 1 :(得分:1)

未在config / bundles.php中加载捆绑软件会在 Symfony 4.3 中使用 NelmioApiDocBundle版本3 引发异常:

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

我最终在环境中通过重定向禁用了api文档的路由,需要将其禁用(产品):

#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

答案 2 :(得分:0)

现在有了symfony4和flex,您可以正常安装捆绑包

composer require nelmio/api-doc-bundle

(因此不会在您的require-dev中将其设置为composer.json依赖)

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

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

因此您不会收到错误(例如来自注释),但不会从Kernel.php

加载

答案 3 :(得分:0)

为了在特定环境中禁用 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)