我希望有人能帮助我在Nelmio中使用Api-platorm。
我使用Api-plaform和Nelmio。我需要对Nelmio隐藏Api-platform文档。
我需要有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 (路由)的配置:
# config/routes/nelmio_api_doc.yaml
app.swagger:
path: /{area}/json
methods: GET
defaults: { _controller: nelmio_api_doc.controller.swagger, area: default }
app.swagger_ui:
path: /{area}
methods: GET
defaults: { _controller: nelmio_api_doc.controller.swagger_ui, area: default }我的API-Platform配置:
# config/routes/api_platform.yaml
api_platform:
resource: .
type: api_platform
prefix: /internal/但是如果我去http://localhost/external或http://localhost/admin,我看到的不仅是需要的路由,还有来自API-Platform的路由:

发布于 2020-07-06 16:39:32
我知道这个问题现在已经过时了,但我正面临着同样的情况,我找到了一个可能对某些人有帮助的变通方法,所以我把它贴出来了。
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);
}
}我希望这对某些人有帮助,祝你编码愉快!
更新
为了启用该装饰器,您必须在服务文件中将其声明为:
App\Swagger\SwaggerDecorator:
decorates: 'api_platform.swagger.normalizer.api_gateway'
arguments: [ '@App\Swagger\SwaggerDecorator.inner' ]
autoconfigure: false然后,在类本身中,将'/internal/docs'替换为您的应用编程接口平台文档使用的实际URL。
希望这能有所帮助。
发布于 2019-03-25 22:40:08
在nelmio配置yaml文件中,使用正则表达式排除文档。例如,要排除/external/doc,您应该:
external:
path_patterns: [ ^/external(?!/doc$) ]https://stackoverflow.com/questions/55238583
复制相似问题