优先用 laravel new 快速启动,但需 Laravel Installer;指定版本或无 Installer 时用 composer create-project;API 项目必须运行 php artisan key:generate,否则加密功能失效。

用 laravel new 还是 composer create-project?
直接用 laravel new 最省事,但背后还是调的 composer create-project。如果你本地没装 Laravel Installer,或者想指定 Laravel 版本(比如要 10.x 而不是最新 11.x),就必须用 composer create-project。
常见错误:运行 laravel new myapi 报错 Command "new" is not defined——说明没装 Laravel Installer,别硬试,切到 composer create-project。
-
laravel new myapi:适合快速起步,自动安装并生成密钥,但只能用默认版本 -
composer create-project laravel/laravel myapi "10.*":可控版本,推荐 API 项目用长期支持版(LTS) - 别用
composer create-project laravel/laravel myapi --prefer-dist加参数——--prefer-dist是 Composer 默认行为,加了反而可能跳过某些必要钩子
创建完不跑 php artisan key:generate 会怎样?
API 项目哪怕不用 session、不用加密 cookie,也必须运行这一步。因为 APP_KEY 不只用于加密,Laravel 的 encrypt、decrypt、signedRoute 等底层功能都依赖它;没生成会导致 RuntimeException: No application encryption key has been specified,连 php artisan tinker 都进不去。
注意:Windows 下用 Git Bash 或 WSL 执行没问题,但 CMD 中如果报 Could not open input file: artisan,说明没进对目录——先 cd myapi 再执行。
- 生成后检查
.env文件里APP_KEY是否已填满 32 位随机字符串 - 别手动改
APP_KEY后不重跑迁移或缓存——有些包(如spatie/laravel-permission)会在启动时缓存加密结果,key 变了但缓存没清,行为会异常 - 部署时如果用 env 文件覆盖,确保
APP_KEY已预置,否则首次请求就崩
laravel/sanctum 和 laravel/passport 到底选哪个?
纯 API 项目(比如给 Vue/React 前端或移动端供接口),优先选 laravel/sanctum。它轻量、无 OAuth2 复杂流程,靠 token + Cookie 混合鉴权,开发调试快,性能开销小。而 laravel/passport 是完整 OAuth2 服务,适合要对接第三方应用、需授权码模式、或已有 OAuth2 生态的场景。
容易踩的坑:装了 sanctum 却还配 Passport::routes(),或者在 AuthServiceProvider 里同时注册两个 guard——Laravel 会懵,token 验证逻辑互相干扰,出现 TokenMismatchException 或静默 401。
- 装 Sanctum:
composer require laravel/sanctum→php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" - 删掉
config/auth.php里多余的guards.api.driver配置,确保只留sanctum或token一种 - 前端发请求时记得带
Accept: application/json,否则 Sanctum 在非 JSON 请求下可能走回 Web guard
API 路由放 routes/api.php 但收不到请求?
最常见原因是没加 api 中间件组,或中间件顺序错了。Laravel 的 api 路由默认走 throttle:api 和 auth:sanctum(如果你配了),但这些都在 app/Http/Kernel.php 的 $middlewareGroups['api'] 里定义。漏掉这个分组,请求就直接 404 或 419。
另一个隐蔽问题:用了 Route::middleware('api') 手动套中间件,但 api 是中间件组名,不是单个中间件——这样会找不到类,报 Class api does not exist。
- 确认
routes/api.php开头有Route::middleware('api')->group(function () { ... }); - 检查
app/Http/Kernel.php中$middlewareGroups['api']是否包含EnsureFrontendRequestsAreStateful::class(Sanctum 必需) - 别在
api.php里写Route::get('/login', [...])->middleware('web')——web中间件含 session,和 API 场景冲突,会破坏无状态性
API 项目的麻烦不在初始化,而在鉴权链路和中间件堆叠的隐式依赖。一个 APP_KEY 漏掉、一个中间件组名拼错、甚至 .env 里多一个空格,都可能让请求卡在某个中间件里静默失败。多看日志,少猜逻辑。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











