laravel中定义路由有五种方法:一、用closure在web.php中快速响应;二、绑定控制器方法实现mvc解耦;三、用resource注册7个crud路由;四、定义带参数的动态路由并支持正则约束;五、用name()命名路由以支持反向解析。

如果您在Laravel项目中需要响应HTTP请求并返回内容,必须通过定义基本路由来建立URL与处理逻辑之间的映射关系。以下是实现该目标的多种方法:
一、在routes/web.php中使用Closure定义路由
此方法适用于快速原型开发或简单响应,无需创建控制器类,直接在路由文件中编写处理逻辑。
1、打开routes/web.php文件。
2、添加如下代码:Route::get('/hello', function () { return 'Hello Laravel!'; });
3、确保该路由位于Route::middleware('web')->group(...)内(Laravel 8+默认已封装)。
4、启动开发服务器后,访问http://your-app.test/hello即可看到返回内容。
二、在routes/web.php中绑定控制器方法
此方法将路由与控制器解耦,适合业务逻辑较复杂、需复用或维护的场景,符合MVC分层原则。
1、使用Artisan命令生成控制器:php artisan make:controller HelloController
2、编辑新生成的app/Http/Controllers/HelloController.php,在index方法中返回响应:return 'Hello from Controller!';
3、在routes/web.php中注册路由:Route::get('/greet', [HelloController::class, 'index']);
4、确认控制器命名空间已正确引入(Laravel 8+默认为App\Http\Controllers)。
三、使用资源路由批量注册CRUD路由
当需要为模型提供标准增删改查接口时,资源路由可一次性声明7个RESTful动作对应路由,大幅提升定义效率。
1、运行命令生成资源控制器:php artisan make:controller PostController --resource
2、在routes/web.php中添加:Route::resource('posts', PostController::class);
3、执行php artisan route:list验证是否生成了index、create、store、show、edit、update、destroy对应路由。
4、注意:资源路由默认仅注册web中间件组,不自动包含api中间件。
四、定义带参数的动态路由
该方法支持从URL路径中提取变量,使路由具备灵活性和语义化能力,常用于详情页、分类页等场景。
1、在routes/web.php中定义含占位符的路由:Route::get('/user/{id}', function ($id) { return 'User ID: ' . $id; });
2、如需约束参数格式,添加正则约束:Route::get('/post/{id}', function ($id) { /* ... */ })->where('id', '[0-9]+');
3、支持多个参数:Route::get('/profile/{username}/{year}', [ProfileController::class, 'show']);
4、参数名必须与闭包函数形参或控制器方法形参完全一致,否则无法注入。
五、使用路由名称进行反向解析
为路由显式指定名称后,可在视图或代码中通过名称生成URL,避免硬编码路径,提升重构安全性。
1、在定义路由时调用name()方法:Route::get('/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');
2、在Blade模板中生成链接:{{ route('admin.dashboard') }}
3、在控制器中重定向:return redirect()->route('admin.dashboard');
4、路由名称必须全局唯一,重复命名将导致后注册的覆盖先注册的。










