Symfony 如何从Nelmio文档中隐藏Api平台文档

Symfony 如何从Nelmio文档中隐藏Api平台文档,symfony,symfony4,api-platform.com,api-doc,nelmioapidocbundle,Symfony,Symfony4,Api Platform.com,Api Doc,Nelmioapidocbundle,我希望有人能帮助我将Api柏拉图RM与Nelmio一起使用 我使用Api平台和Nelmio。我需要对Nelmio隐藏Api平台文档 我需要3条路线: /internal -> API-Platform Docs /external -> NELMIO-Docs /admin -> NELMIO-Docs 我的Nelmio配置: # config/packages/nelmio_api_doc.yaml nelmio_api_doc: documentation:

我希望有人能帮助我将Api柏拉图RM与Nelmio一起使用

我使用Api平台和Nelmio。我需要对Nelmio隐藏Api平台文档

我需要3条路线:

/internal -> API-Platform Docs
/external -> NELMIO-Docs
/admin -> NELMIO-Docs
我的Nelmio配置:

# config/packages/nelmio_api_doc.yaml
nelmio_api_doc:
    documentation:
        info:
            title: ...
            description: ...
            version: 0.2.0
    areas: # to filter documented areas
        default:
            path_patterns: [ ^/external ]
        external:
            path_patterns: [ ^/external ]
        admin:
            path_patterns: [ ^/admin ]
Nelmio的我的配置(路线):

API平台的我的配置:

# config/routes/api_platform.yaml
api_platform:
    resource: .
    type: api_platform
    prefix: /internal/
但如果我去或我总是看到不仅需要的路由,而且还有来自API平台的路由:

# config/routes/api_platform.yaml
api_platform:
    resource: .
    type: api_platform
    prefix: /internal/

在nelmio配置yaml文件上,使用正则表达式排除文档。例如,要排除
/external/doc
,您应该:

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

我知道这个问题现在已经很老了,但我面临着同样的情况,我找到了一个可能对某些人有帮助的解决办法,所以我把它贴出来

API平台允许您装饰Swagger,以便您可以自定义最终文档输出。我利用这一点,在不要求的情况下,去掉了整个api平台文档

<?php

namespace App\Swagger;

use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;

final class SwaggerDecorator implements NormalizerInterface
{
    private $decorated;
    private $requestStack;

    public function __construct(NormalizerInterface $decorated, RequestStack $requestStack)
    {
        $this->decorated = $decorated;
        $this->requestStack = $requestStack;
    }

    public function normalize($object, $format = null, array $context = [])
    {
        if ('/internal/docs' !== $this->requestStack->getCurrentRequest()->getPathInfo()) {
            // request is not for internal docs (maybe it is for external or admin one) so get rid of api platform docs
            return null;
        }

        $docs = $this->decorated->normalize($object, $format, $context);

        // here you can customize documentation

        return $docs;
    }

    public function supportsNormalization($data, $format = null)
    {
        return $this->decorated->supportsNormalization($data, $format);
    }
}

你找到如何处理这个问题了吗?@krut1:你找到解决问题的方法了吗?我也处于同样的情况hi@No\u或\u是的,否:我们没有找到任何解决方案:(当您想排除路径中处于“第二位置”的内容时,此方法有效。您的示例将仅删除/external/doc,但如果您想删除整个/external,它似乎不起作用。路径\u模式:[^/external]这应该只包括以
/external
开头的所有内容,不幸的是,它对我不起作用。如果你只想包括以/external开头的所有内容,你不需要路径,只需使用prefix:/external/显然有一个bug或其他东西,因为这不起作用。我使用API平台作为我们的一部分端点,w它们的前缀都是
/v1
,我无法将它们从Nelmio文档中排除。到目前为止,我找到的唯一解决方案是完全禁用API平台上的文档。您能提供有关解决方案的更多详细信息吗?