1. 路由基础与入口
1.1 Laravel 路由的工作原理
在 Laravel 框架中,路由负责把请求的 URL 映射到对应的处理逻辑,它像门牌把访客带到具体的控制点。路由的核心目标是简化 URL 与后端逻辑的关联,从而实现清晰的职责分离。
路由通常注册在 routes/web.php 文件中,Web 路由与中间件组相关联,例如 CSRF、会话和认证等。理解这一点有助于你在实际开发中正确应用中间件,确保请求符合应用规则。
1.2 基本路由示例与请求方法
Laravel 提供多种 HTTP 动作方法,如 GET、POST、PUT、DELETE,通过 Route::get、Route::post 等方法注册。最常用的 GET 路由通常用于页面展示。
下面给出一个简单的例子,演示如何在 routes/web.php 注册一个根路径的 GET 路由,返回一个视图或文本。
// routes/web.php
use Illuminate\\Support\\Facades\\Route;
Route::get('/', function () {return 'Hello Laravel 路由';
});
这段代码展示了 最基础的 GET 路由,当访问根路径时返回一个文本内容,帮助新手快速理解路由的触发时机。
2. 控制器与路由的连接
2.1 控制器的创建与基本用法
控制器的作用是把路由请求中的处理逻辑组织起来,让路由文件更简洁、逻辑更清晰。控制器通常放在 app/Http/Controllers 目录下,便于统一管理。
通过命令 php artisan make:controller TodoController 可以快速生成一个控制器,随后可以在其中编写方法来处理不同路由。
2.2 路由绑定到控制器方法
在路由中指定控制器和方法作为处理逻辑,路由会把请求转发给对应的方法,实现清晰的职责分离。
// routes/web.php
use App\\Http\\Controllers\\TodoController;
Route::get('/todos', [TodoController::class, 'index']);
Route::get('/todos/{id}', [TodoController::class, 'show']);
Route::post('/todos', [TodoController::class, 'store']);
以上示例展示了 路由到控制器方法映射的基本写法,适用于简单的 CRUD 切片,便于快速上手与扩展。
3. 实战案例:待办事项的路由与控制器
3.1 设计目标与数据结构
实战案例选用待办事项(Todo)作为练习对象,覆盖列出、查看、添加、修改和删除等常见操作。数据结构采用简化的数组模拟,不涉及复杂的数据库配置,便于零基础学习者快速上手。
设计要点包括:路由清晰、控制器职责单一、返回数据结构可预期,这有助于后续在真实项目中逐步接入数据库。

3.2 路由与控制器实现
首先在 routes/web.php 中定义待办相关的路由,并将它们映射到 TodoController 的不同方法。保持路由命名与资源语义一致,便于阅读和维护。
// routes/web.php
use App\\Http\\Controllers\\TodoController;
Route::get('/todos', [TodoController::class, 'index']);
Route::get('/todos/{id}', [TodoController::class, 'show']);
Route::post('/todos', [TodoController::class, 'store']);
Route::put('/todos/{id}', [TodoController::class, 'update']);
Route::delete('/todos/{id}', [TodoController::class, 'destroy']);
控制器的核心方法示例:index、show、store、update、destroy对应相应的 CRUD 操作,便于在本地快速测试。
// app/Http/Controllers/TodoController.php
namespace App\\Http/Controllers;
use Illuminate\\Http\\Request;class TodoController extends Controller
{private static $todos = [['id' => 1, 'title' => '学习 Laravel 路由', 'completed' => false],['id' => 2, 'title' => '实现控制器基础练习', 'completed' => false],];public function index(){return response()->json(self::$todos);}public function show($id){$item = collect(self::$todos)->firstWhere('id', (int)$id);if (!$item) {return response()->json(['message' => 'Not found'], 404);}return response()->json($item);}public function store(Request $request){$title = $request->input('title', '新待办');$new = ['id' => rand(100, 999), 'title' => $title, 'completed' => false];return response()->json($new, 201);}public function update(Request $request, $id){// 简化示例:不实际修改静态数据return response()->json(['message' => 'Updated', 'id' => (int)$id]);}public function destroy($id){// 简化示例:不实际删除静态数据return response()->json(['message' => 'Deleted', 'id' => (int)$id]);}
}
3.3 测试与演练
使用浏览器或工具如 Postman、curl 来测试路由的行为,观察 JSON 结果是否符合预期,并留意状态码表示的含义。
示例测试命令:GET /todos、GET /todos/1、POST /todos,可以快速验证控制器方法返回的数据结构。


