Как отключить Nelmio UI в производственной среде?

Есть ли способ отключить все документы пользовательского интерфейса Nelmio Swagger? В производстве я хочу, чтобы внешний мир ничего не видел по следующим URL-адресам, но в dev они должны отображать полезные документы и песочницу как обычно:

Похоже, в конфигурации Nelmio должен быть простой переключатель для этого, но я его не нашел. Моя компания использует пакет Nelmio API Doc в Symfony для разработки API для непубличного API. Сервер API доступен для всех, но мы не заинтересованы в публикации его использования в мире.


person Matthew Marichiba    schedule 08.11.2016    source источник
comment
Включите пакет только для среды разработки: if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { new Nelmio\ApiDocBundle\NelmioApiDocBundle(); }   -  person gp_sflover    schedule 08.11.2016


Ответы (4)


Комментарий @ gp_sflover направил меня на верный путь, но это нечто большее, чем просто отключение 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
person Matthew Marichiba    schedule 08.11.2016

Теперь с помощью symfony4 и flex вы можете установить пакет обычным образом.

composer require nelmio/api-doc-bundle

(Так что он не будет установлен как require-dev зависимость в вашем composer.json)

Теперь вы измените настройку в project/config/bundles.php на:

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

Таким образом, вы не получаете ошибок (например, из аннотаций), но он не загружается из Kernel.php

person The_Dome    schedule 08.04.2019

отсутствие загрузки пакета в config / bundles.php вызывает исключение в Symfony 4.3 с NelmioApiDocBundle версии 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
person Sebastian Viereck    schedule 26.11.2019

Чтобы отключить 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)
person Ali Khalili    schedule 04.03.2021