说明:本教程只是整理出使用的用法,方便忘记时快速查找。如果需要详细的教程请参考官方文档。
一、路由定义
使用场景: 为不同页面或功能创建唯一的 URL 地址。
示例:
<?php
use think\facade\Route;
Route::get('hello', 'index/Index/hello');
当用户访问 /hello 时,将会调用 index 控制器的 hello 方法。
使用案例:
假设你正在开发一个博客系统,你可以为文章列表和文章详情创建不同的路由规则。
Route::get('articles', 'blog/Index/index'); // 文章列表
Route::get('articles/:id', 'blog/Article/read'); // 文章详情
二、变量规则
使用场景: 在 URL 中传递参数,以便在控制器方法中使用。
示例:
Route::get('user/:id', 'index/User/read');
当用户访问 /user/1 时,$id 参数将会被设置为 1。
使用案例:
在一个电商网站中,你可以使用变量规则来获取商品详情。
Route::get('products/:id', 'shop/Product/detail'); // 获取商品详情
三、路由参数
使用场景: 在一个 URL 中传递多个参数。
示例:
Route::get('user/:name,:age', 'index/User/info');
当用户访问 /user/John,25 时,$name 参数将会被设置为 John,$age 参数将会被设置为 25。
四、路由中间件
使用场景: 在请求到达控制器之前或之后执行一些操作,如身份验证、日志记录等。
示例:
Route::middleware(['auth'])->group(function () {
Route::get('profile', 'index/User/profile');
});
使用案例:
在一个需要登录才能访问的网站中,你可以使用中间件来实现权限控制。
Route::middleware(['auth'])->group(function () {
Route::get('dashboard', 'admin/Dashboard/index'); // 仪表盘
});
五、路由分组
使用场景: 将具有相似特性的路由规则组合在一起,便于管理和维护。
示例:
Route::group('admin', function () {
Route::get('index', 'admin/Index/index');
Route::get('login', 'admin/Index/login');
});
使用案例:
在一个多用户系统中,你可以为每个角色创建一个路由分组。
Route::group('admin', function () {
// 管理员相关路由
});
Route::group('user', function () {
// 普通用户相关路由
});
六、资源路由
使用场景: 自动生成与资源相关的路由规则,简化 API 接口的构建。
示例:
Route::resource('user', 'index/User');
使用案例:
在一个 RESTful API 中,你可以使用资源路由来管理用户资源。
Route::resource('users', 'api/User'); // 用户资源
七、注解路由
使用场景: 在控制器方法上添加注解来定义路由规则,使代码更简洁。
示例:
namespace app\index\controller;
use think\annotation\Route;
class User
{
#[Route('user/:id')]
public function read($id)
{
// ...
}
}
八、路由绑定
使用场景: 将 URL 中的参数绑定到模型,简化数据操作。
示例:
在一个电商网站中,你可以使用路由绑定来获取商品详情。
Route::bind('Product', 'app\model\Product');
Route::get('products/:id', 'shop/Product/detail'); // 获取商品详情
九、域名路由
使用场景: 根据不同的域名来定义不同的路由规则,实现子域名功能。
示例:
Route::domain('admin.example.com')->group(function () {
Route::get('index', 'admin/Index/index');
});
使用案例:
在一个多租户系统中,你可以使用域名路由来实现不同租户的隔离。
Route::domain('tenant1.example.com')->group(function () {
// 租户 1 的路由规则
});
Route::domain('tenant2.example.com')->group(function () {
// 租户 2 的路由规则
});
十、MISS路由
使用场景: 处理不存在的路由,返回自定义的错误页面或信息。
示例:
Route::miss('index/Index/miss');
使用案例:
在一个网站中,你可以使用 MISS 路由来处理 404 错误。
Route::miss('index/Index/notFound'); // 自定义 404 页面
十一、跨域请求
使用场景: 支持跨域请求,允许不同源的客户端访问 API。
示例:
Route::middleware(['cors'])->group(function () {
// ...
});
使用案例:
在一个前后端分离的项目中,你可以使用跨域中间件来支持前端请求。
Route::middleware(['cors'])->group(function () {
Route::get('api/data', 'api/Data/getData'); // 获取数据
});
十二、RESTful 风格
使用场景: 构建符合 RESTful 风格的 API 接口,便于前后端分离开发。
示例:
Route::resource('user', 'api/User');
使用案例:
在一个社交网络应用中,你可以使用 RESTful 风格的路由来管理用户和帖子。
Route::resource('users', 'api/User'); // 用户资源
Route::resource('posts', 'api/Post'); // 帖子资源