题目
Laravel 路由基础:如何定义一个带参数的路由并绑定控制器方法?
信息
- 类型:问答
- 难度:⭐
考点
路由定义, 控制器绑定, 路由参数传递
快速回答
在 Laravel 中定义带参数路由并绑定控制器的步骤:
- 在
routes/web.php中使用Route::get()定义路由 - 在路由路径中用
{}声明参数(如/user/{id}) - 通过
->controller()方法绑定控制器类 - 在控制器方法中声明对应参数接收值
示例代码:Route::get('/user/{id}', [UserController::class, 'show']);
解析
原理说明
Laravel 路由是访问应用的入口点,负责将 HTTP 请求映射到对应的控制器方法。路由参数通过 URI 中的占位符 {} 捕获,并自动传递给绑定的控制器方法。
代码示例
1. 定义路由(routes/web.php)
use App\Http\Controllers\UserController;
// 基础路由定义
Route::get('/user/{id}', [UserController::class, 'show']);
// 带约束的路由(限制 id 为数字)
Route::get('/post/{id}', [PostController::class, 'detail'])->where('id', '[0-9]+');2. 创建控制器(app/Http/Controllers/UserController.php)
namespace App\Http\Controllers;
class UserController extends Controller
{
public function show($id)
{
// 通过 $id 查询用户
return view('user.profile', ['user' => User::find($id)]);
}
}最佳实践
- 路由命名:使用
->name()命名路由便于生成 URLRoute::get('/user/{id}', ...)->name('user.profile'); - 参数约束:用
->where()验证参数格式,避免无效请求 - 依赖注入:控制器方法可直接类型提示依赖(如 Request 对象)
常见错误
- 参数缺失:路由定义了
{id}但控制器方法未声明参数 - 顺序错误:模糊路由(如
/user/create)必须放在精确路由(如/user/{id})之前 - 未导入控制器:忘记在路由文件顶部添加
use App\Http\Controllers\UserController;
扩展知识
- 可选参数:在参数后加
?如/user/{name?},控制器方法需设置默认值 - 路由模型绑定:自动注入 Eloquent 模型
Route::get('/user/{user}', [UserController::class, 'show']);
控制器方法:public function show(User $user) - 路由缓存:生产环境使用
php artisan route:cache提升性能