如何在Nelmio Docs中隐藏API-Platform文档及路由配置问题
解决Nelmio Docs显示API Platform路由的问题
我来帮你搞定这个问题!核心原因是Nelmio API Doc默认会扫描所有路由,包括API Platform的/internal前缀路由,我们需要通过精准的路径过滤和路由隔离配置来解决这个问题,分以下几步操作:
1. 确保API Platform路由完全隔离到/internal前缀
首先确认你的API Platform路由配置已经正确添加前缀,config/routes/api_platform.yaml保持现有配置即可:
api_platform: resource: . type: api_platform prefix: /internal/
如果想让/internal直接指向API Platform的Swagger UI(而不是默认的/internal/docs),可以在config/packages/api_platform.yaml里添加Swagger UI路径配置:
api_platform: enable_swagger_ui: true swagger_ui: path: /internal # 直接把API Platform Docs绑定到/internal路径
2. 修正Nelmio API Doc的区域配置,过滤API Platform路由
修改config/packages/nelmio_api_doc.yaml,给每个Nelmio区域添加路径匹配规则和排除规则,确保只加载对应前缀的路由,同时完全排除API Platform的/internal路由:
nelmio_api_doc: documentation: info: title: ... # 保留你的标题 description: ... # 保留你的描述 version: 0.2.0 areas: # 为每个区域设置独立的路径匹配,同时排除/internal路由 external: path_patterns: [ ^/external ] # 只包含/external开头的路由 excluded_paths: [ ^/internal ] # 强制排除API Platform的路由 admin: path_patterns: [ ^/admin ] # 只包含/admin开头的路由 excluded_paths: [ ^/internal ] # 强制排除API Platform的路由 # 保留default区域作为 fallback(可选) default: path_patterns: [ ^/external ] excluded_paths: [ ^/internal ]
3. 验证Nelmio路由配置的正确性
你的config/routes/nelmio_api_doc.yaml配置是正确的,它会根据访问的路径自动匹配对应的Nelmio区域:
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 }
比如:
- 访问
http://localhost/external时,会使用external区域的配置,只显示/external前缀的路由 - 访问
http://localhost/admin时,会使用admin区域的配置,只显示/admin前缀的路由
额外的保险方案:通过标签过滤API Platform路由
如果上面的路径过滤还是有问题,可以给API Platform的所有路由添加专属标签,然后在Nelmio里排除这个标签:
- 在
config/packages/api_platform.yaml里给所有API Platform资源添加标签:
api_platform: defaults: attributes: swagger_context: tags: [ "Internal API" ] # 给所有API Platform路由打上内部API标签
- 在Nelmio的区域配置里排除这个标签:
nelmio_api_doc: # ... 其他配置不变 areas: external: path_patterns: [ ^/external ] excluded_tags: [ "Internal API" ] # 排除内部API标签的路由 admin: path_patterns: [ ^/admin ] excluded_tags: [ "Internal API" ] # 排除内部API标签的路由
这样就能彻底确保Nelmio Docs不会显示任何API Platform的路由了。
内容的提问来源于stack exchange,提问作者krut1
相关产品推荐
相关产品推荐

