lighthouse 命令需通过 php artisan lighthouse:install 启用,非全局命令;schema.graphql 必须置于 graphql/schema.graphql(base_path 下),仅支持 .graphql 后缀;graphql 接口默认禁用 get 请求,405 错误属正常安全限制;@auth 指令依赖 guard 配置,需匹配 api 场景的 api guard。

composer require 之后 lighthouse 命令不识别?
因为 Lighthouse 不是全局命令,它只注册为 Laravel 的 Artisan 命令。安装后必须通过 php artisan lighthouse:install 才能启用核心配置和命令支持。
常见错误现象:Command "lighthouse:install" is not defined —— 这通常是因为 Composer 安装成功但未执行该 Artisan 命令,或服务提供者未自动注册(Laravel 5.5+ 一般自动发现,但低于此版本需手动在 config/app.php 中添加 Nuwave\Lighthouse\Providers\LighthouseServiceProvider::class)。
- 确认 Laravel 版本 ≥ 8.0(Lighthouse v6+ 要求),旧版需降级使用 v5
- 运行
php artisan vendor:publish --provider="Nuwave\Lighthouse\Providers\LighthouseServiceProvider"手动发布配置(尤其 Laravel 9+ 可能跳过自动发布) - 检查
app/Providers/AppServiceProvider.php中是否误删了public function boot()或干扰了服务绑定
schema.graphql 文件放哪、怎么加载?
Lighthouse 默认从 graphql/schema.graphql 读取 Schema,路径是相对 base_path() 的,不是 resources/ 下。放错位置会导致 Schema must be provided 错误或空响应。
使用场景:开发时你写类型、查询、Mutation;部署时 Lighthouse 会编译成 PHP 类缓存,所以文件必须可读且路径固定。
- 确保该文件存在且至少含一行
type Query { ping: String! } - 若想换路径(比如放在
resources/graphql/),需在config/lighthouse.php中修改'schema' => base_path('resources/graphql/schema.graphql') - 别用
.gql后缀——Lighthouse 只认.graphql,否则解析失败无提示
GraphQL 查询返回 405 Method Not Allowed?
默认 Lighthouse 只允许 POST 请求访问 /graphql,浏览器直接 GET 访问会触发 405。这不是配置错误,而是安全限制。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
性能 / 兼容性影响:开启 GET 会暴露 schema(如带 ?query={__schema{types{name}}}),线上环境务必关闭。
- 开发调试时可用
curl -X POST http://localhost/graphql -H "Content-Type: application/json" -d '{"query":"{ping}"}' - 若真要支持 GET(例如某些前端工具链需要),在
routes/graphql.php中显式添加Route::get('/graphql', [\Nuwave\Lighthouse\Support\Http\Controllers\GraphQLController::class, 'query']); - 注意:Laravel 的 CSRF 保护对 GraphQL POST 默认关闭,但若你在中间件中强制校验,会导致 419,需排除
/graphql路由
启用 @auth 指令却报 Unauthorized?
@auth 依赖 Laravel 的守卫(guard)机制,但它默认用 web guard,而 API 场景常用 api。没配对就会静默拒绝。
参数差异:指令本身不传 guard 名,靠上下文——Lighthouse 从请求头 Authorization: Bearer xxx 推断,再调用 Auth::guard('api')->user()。
- 确认
config/auth.php中'defaults.guard'是'api',或在config/lighthouse.php的'guards'配置项里显式指定['api'] - 如果用 Sanctum,确保请求头带
Accept: application/json,否则 Laravel 可能 fallback 到 web guard - 测试时别用 tinker 或 PHPUnit 直接调用 resolver——
@auth依赖完整的 HTTP 请求生命周期,单元测试需用actingAs($user, 'api')
最常被忽略的是:Lighthouse 的 @auth 不处理 token 过期或无效格式,它只做“当前请求是否有认证用户”这一层判断。token 校验失败发生在更早的中间件阶段,错误信息不会显示为 GraphQL 错误,而是直接 401 HTTP 响应。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










