API Platform下Swagger UI路径无法修改问题求助
解决API Platform根路径仍指向Swagger UI的问题
我来帮你搞定这个问题!你遇到的核心原因是:API Platform默认会自动在根路径/生成Swagger UI的路由,而且这个路由的匹配优先级比你自定义的/路由更高,所以即使你配置了自己的Twig页面,访问/还是会加载Swagger。下面给你两种实用的解决方案:
方案一:直接修改Swagger UI的默认路径(推荐)
这种方法不需要给API接口加额外前缀,就能让Swagger UI固定在/docs,同时把根路径/完全交给你的自定义页面。
- 更新API Platform配置文件
打开app/config/packages/api_platform.yaml,添加swagger_ui.route_path配置项,指定Swagger UI的路径为/docs:
api_platform: mapping: paths: ['%kernel.project_dir%/src/Entity'] enable_swagger_ui: true swagger_ui: route_path: /docs # 把Swagger UI的默认路径改成/docs enable_re_doc: true enable_docs: true
- 移除手动添加的Swagger路由
打开app/config/routes.yaml,删掉你之前手动加的swagger_ui路由(因为现在API Platform会自动生成/docs的路由了),只保留你的自定义根路由:
hello-world: path: / controller: App\Controller\HelloController::index
- 保持API路由前缀不变
app/config/routes/api_platform.yaml的前缀依然设为/,确保你的API接口还是在根路径下(如果不需要额外前缀的话):
api_platform: resource: . type: api_platform prefix: /
最后执行php bin/console cache:clear清除缓存,再访问/就能看到你的Twig页面,/docs则正常显示Swagger UI啦。
方案二:给API接口添加独立前缀
如果你希望把所有API接口都隔离到一个子路径(比如/api),可以用这种方式:
- 修改API路由前缀
打开app/config/routes/api_platform.yaml,给所有API路由加上/api前缀:
api_platform: resource: . type: api_platform prefix: /api # 所有API接口和默认Swagger都会移到/api路径下
- 保留原有路由配置
app/config/routes.yaml的配置可以保持不变,你的/docs和/路由都能正常生效:
swagger_ui: path: /docs controller: api_platform.swagger.action.ui hello-world: path: / controller: App\Controller\HelloController::index
- API Platform配置无需改动
app/config/packages/api_platform.yaml保持你原来的配置即可。
这种方式下,API接口会在/api路径下,/docs显示Swagger,/显示你的自定义页面,三者完全独立,不会互相干扰。记得同样要清除缓存哦!
内容的提问来源于stack exchange,提问作者Nearyuk
相关产品推荐
相关产品推荐

