路由模型绑定 会根据路由参数自动将模型实例注入到路由/控制器中 — 因此您不必手动通过 id 获取模型,Laravel 会为您自动解析并注入它(如果找不到会自动返回 404)。这是一个优雅的便利功能,可以减少样板代码。
隐式绑定(常见情况)
::(, [::, ]);
{
;
}
当您对模型进行类型提示(User $user)且路由参数名称匹配({user})时,Laravel 自动通过 id 获取模型 并注入它 — 替换您原本需要写的手动 User::findOrFail($id) 代码,如果记录不存在则自动返回 404。
// ❌ without — manual fetching and 404 handling
public function show($id) {
$user = User::findOrFail($id); // fetch + 404 by hand
return $user;
}
// ✅ with route model binding — Laravel does it for you
public function show(User $user) { // injected, 404 handled automatically
return $user;
}
// bind by a column other than id (e.g. a slug)
Route::get('/posts/{post:slug}', ...); // resolves Post by its `slug` column
// or define a custom key on the model:
public function getRouteKeyName() { return 'slug'; }
默认情况下它通过主键绑定,但您可以通过任何列绑定(例如 slug) — 对友好的 URL 很有用。
// ensure the comment belongs to the post (scoped to the parent)
Route::get('/posts/{post}/comments/{comment}', ...); // auto-scoped in Laravel
路由模型绑定是一个便利且常用的 Laravel 功能,可以减少样板代码并使控制器更清晰,因此理解它对于构建 Laravel 应用是日常必需的知识。
その核心好处是 自动化常见模式 即通过路由参数获取模型:不是在每个控制器方法中手动编写 Model::findOrFail($id)(加上 404 处理),您只需对模型进行类型提示,Laravel 就会自动解析并注入它 — 包括在记录不存在时返回 404。
这消除了几乎每个 show/edit/update/delete 操作中的重复获取和检查代码(这是 CRUD 应用的大部分),使控制器保持专注和清晰。
理解隐式绑定(常见情况)、如何 自定义绑定列 (例如通过 slug 而不是 id 绑定以获得友好的 URL — 一个常见需求)和嵌套资源的作用域绑定涵盖了实际用法。
由于路由模型绑定出现在整个 Laravel 应用中(任何操作特定模型的路由都会使用它),并且由于它体现了框架强调减少样板代码和优雅便利性的理念,知道它如何工作以及如何自定义它是重要的、实用的知识,让您能够编写更清晰的控制器并有效利用 Laravel 众多质量改进功能之一。