You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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里排除这个标签:

  1. 在config/packages/api_platform.yaml里给所有API Platform资源添加标签:
api_platform:
  defaults:
    attributes:
      swagger_context:
        tags: [ "Internal API" ] # 给所有API Platform路由打上内部API标签
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:41:27