laravel路由核心在于精准分发、安全拦截与结构化组织:web.php处理带状态交互,api.php面向无状态接口;参数约束应前置用where()过滤非法值;资源路由需按需启用动作;路由分组统一管理中间件、前缀与命名空间。

掌握Laravel路由不是堆砌语法,而是理解请求如何被精准分发、安全拦截和结构化组织。核心在于选对文件、用对方式、配好约束与分组,而不是盲目写一堆Route::get。
分清 web.php 和 api.php 的职责
这两个文件不是可互换的容器,而是语义明确的分工:
- web.php:处理带状态的用户交互,自动启用 session、CSRF 防护、重定向响应等中间件,适合登录页、后台管理、表单提交等场景
-
api.php:面向无状态接口,自动加了
throttle:api限流、无 session、默认返回 JSON,适合移动端或前端分离项目调用 - 别在 web.php 里写 /api/users —— 应该移到 api.php;也别在 api.php 里 return view(),它不支持视图渲染
参数约束要写在路由定义层,别拖到控制器里
约束不是“锦上添花”,而是第一道输入防线。用 where() 提前过滤非法值,避免无效查询和潜在报错:
- 用户 ID 必须是数字:
->where('id', '[0-9]+') - 文章 slug 只允许小写字母、数字和短横线:
->where('slug', '[a-z0-9\-]+') - 多参数一起约束更清晰:
->where(['category' => '[a-zA-Z]+', 'year' => '\d{4}']) - 注意:约束正则不带 ^ 和 $,Laravel 内部已做全匹配封装
资源路由不是偷懒捷径,而是 REST 约定的落地工具
Route::resource() 生成的是标准七种动作(index/show/create/store/edit/update/destroy),但要用得准:
- 只暴露需要的动作,比如只读列表和详情:
->only(['index', 'show']) - 排除敏感操作:
->except(['create', 'store', 'edit', 'update', 'destroy']) - 配合命名空间使用更安全:
Route::prefix('admin')->namespace('Admin')->resource('posts', PostController::class) - 运行
php artisan route:list确认实际注册了哪些路由,避免误以为“写了就生效”
路由分组让配置一次生效,而不是重复粘贴
凡是有公共特征的路由,优先考虑分组,而不是逐条写 middleware 或 prefix:
- 后台路由统一加 auth 中间件:
Route::middleware('auth')->group(function () { ... }) - API 版本隔离:
Route::prefix('v1')->group(function () { Route::apiResource('users', UserController::class); }) - 子域名支持多租户:
Route::domain('{tenant}.app.com')->group(function () { ... }) - 嵌套分组可组合能力更强,比如先按模块分组,再在其中按权限细分中间件
不复杂但容易忽略











