Laravel 10 和 11 资源路由完全兼容,API 正确实现依赖 Route::apiResource()、--api 生成控制器、单数参数命名及 api 中间件,而非版本升级本身。

Laravel 10 和 11 在资源路由机制上完全兼容,无破坏性变更。API 场景下核心差异不在版本,而在于是否用对 apiResource() 与 resource()、控制器生成方式、参数绑定规则和中间件上下文——这些细节决定接口能否跑通,而非 Laravel 版本升级本身。
路由定义:apiResource() 是 API 的唯一正确入口
纯 API 项目必须在 routes/api.php 中使用 Route::apiResource():
- 自动生成 5 条标准路由(
index、show、store、update、destroy),默认排除create和edit - 请求体自动解析为 JSON,无需手动
$request->json()->all() - 自动套用
api中间件组(含throttle、substituteBindings),不启用 session 或 CSRF - 若误用
Route::resource(),POST 会返回 419(CSRF 失败),$request->all()始终为空
控制器生成:--api 是强制起点,别手写
运行命令生成控制器,是避免签名错误的唯一可靠方式:
-
php artisan make:controller Api/V1/UserController --api→ 方法已精简为 5 个,参数名固定为$id或$user(单数),签名完整,含Request $request参数 - 手写控制器极易出错:比如
update($id)漏掉Request参数,或写成update(Request $request, $userId)(参数名错导致模型绑定失败) - Laravel 10/11 均不校验类型提示,只认参数名;
show(int $id)或show($userId)都会中断路由绑定
参数与绑定:单数命名 + 无类型提示 = 稳定运行
资源路由依赖严格参数命名约定,框架不做推断:
- 资源名
users→ 方法参数必须是$user;api_tokens→ 参数为$apiToken(下划线转驼峰) - 所有方法必须是
public,不可加static,不可设默认值(如destroy($id = null)) - 模型绑定生效前提:路由定义中 URI 含
{user},控制器方法参数名必须为$user,且类使用use Illuminate\Http\Request;
命名与分组:API 不走 name() 链式命名,但可加前缀
API 路由通常不依赖命名(因前端调用靠固定路径),但需注意组织逻辑:
-
Route::apiResource('users', UserController::class)默认路由名为users.index、users.show等,无需额外->name() - 如需统一前缀(如版本控制),用分组:
Route::prefix('v1')->group(function () { Route::apiResource('posts', PostController::class); }); - 切勿在
routes/api.php中混用web中间件或跳转视图;也别在routes/web.php中定义 API 资源路由



















