scribe 路由排除需在 routes 配置的 match 内嵌 exclude 数组,支持通配符但不支持正则,路径须与 route:: 定义完全一致;可结合 middleware 分层过滤,闭包及资源路由多余动作需显式排除。

Scribe 默认会扫描所有匹配规则的路由,但实际项目中常有管理后台、健康检查、调试接口等无需对外暴露的路由。要在 config/scribe.php 中精准排除它们,关键不是靠“黑名单思维”写一堆要删的路由,而是用 exclude 配置项在匹配逻辑内直接过滤——既安全又高效。
在 routes 配置中使用 exclude 明确剔除
必须把 exclude 写在具体路由匹配规则内部,而不是顶层配置。Scribe 不识别全局 exclude,只认嵌套在 match 下的排除列表。
- 正确写法(推荐):只扫描
api/下的路由,同时排除api/debug和api/health
'routes' => [
[
'match' => [
'prefixes' => ['api/*'],
],
'exclude' => [
'api/debug/*',
'api/health',
'api/admin/*', // 如有独立管理接口
],
],
],
- 支持通配符
*,但不支持正则;路径需与Route::get('api/health', ...)中定义的 URI 完全一致(不含域名、查询参数) - 若路由带命名空间或中间件(如
throttle:api),排除仅基于 URI 路径,与中间件无关
用中间件名配合 exclude 实现语义化过滤
当某些路由统一加了中间件(如 middleware('debug')),可在 match 中结合 middleware 和 exclude 进行分层控制:
- 先匹配带
debug中间件的所有路由 - 再在该组内排除特定路径,避免误伤其他 debug 接口
'routes' => [
[
'match' => [
'prefixes' => ['api/*'],
'middleware' => ['debug'],
],
'exclude' => ['api/debug/log'],
],
],
- 中间件名必须与
app/Http/Kernel.php中注册的别名完全一致(例如是debug,不是app.debug) - 这种写法适合团队约定“所有调试接口都加 debug 中间件”的场景,比硬写路径更易维护
排除闭包路由和资源路由中的非标准动作
闭包路由无法被 Scribe 解析参数,且通常用于临时调试;而 Route::apiResource() 默认包含 create、edit 等 HTML 页面路由(Laravel 10+ 已默认移除,但旧项目仍可能存在)。这些应主动排除:
- 闭包路由:在
exclude中添加完整路径,如'api/test-closure' - 资源路由多余动作:若只保留
index、show、store、update、destroy,可排除create和edit - 注意:Scribe 不会自动识别
only或except参数,必须显式写进exclude
验证排除是否生效的小技巧
生成文档前快速确认排除逻辑是否起作用:
- 执行
php artisan route:list --name=health查看目标路由是否存在及完整 URI - 运行
php artisan scribe:generate --dry-run(部分 v4.10+ 版本支持),它会打印将被处理的路由列表,不实际生成文件 - 检查生成后的
public/docs/index.html是否还存在对应接口卡片;若有,说明exclude路径写法不匹配
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











