在 ThinkPHP 中,路由配置允许你将 URL 请求映射到指定的控制器和方法。路由配置文件一般位于 application/route.php
中,下面是一些常见的路由配置示例。
1. 基本路由配置
最基本的路由配置方式是将 URL 路径映射到指定的控制器方法。
use think\facade\Route;// 将 /hello 映射到 Index 控制器的 hello 方法
Route::get('hello', 'index/hello');// 将 /product 映射到 Product 控制器的 index 方法
Route::get('product', 'product/index');
2. 带参数的路由
你可以在路由中使用参数,参数可以通过 URL 传递。
// 捕获 id 参数,映射到 Product 控制器的 detail 方法
Route::get('product/:id', 'product/detail');
在 ProductController
中,你可以通过 $id
来获取传递的参数。
// ProductController.php
public function detail($id)
{return 'Product ID: ' . $id;
}
3. 路由参数约束
你可以为路由参数添加约束,指定参数的格式。
// 参数 id 必须是数字
Route::get('product/:id', 'product/detail')->pattern(['id' => '\d+']);
4. 使用正则路由
ThinkPHP 允许你为路由使用正则表达式来匹配复杂的 URL 模式。
// 匹配 /article/1234 格式的 URL
Route::get('article/:id', 'article/show')->pattern(['id' => '\d+']);
5. 路由别名
可以为路由设置别名,使得你可以使用不同的 URL 来访问相同的路由。
// 将 /profile 映射到 User 控制器的 info 方法
Route::get('profile', 'user/info')->name('user.profile');
6. 路由分组
可以使用路由分组来管理不同模块的路由。
Route::group('admin', function () {// 映射到 admin 模块的 User 控制器的 index 方法Route::get('user', 'admin/user/index');Route::get('product', 'admin/product/index');
});
7. 路由缓存
对于生产环境,ThinkPHP 提供了路由缓存功能,以提高性能。
// 在生产环境中,可以使用以下命令缓存路由配置
php think route:cache
8. 自定义 HTTP 请求类型
你可以为路由指定请求类型,如 get
、post
、put
、delete
等。
// POST 请求方式访问该路由
Route::post('submit', 'index/submit');// PUT 请求方式访问该路由
Route::put('update/:id', 'index/update');
9. 路由回调方法
你可以使用闭包函数定义一个匿名路由。
Route::get('hello', function () {return 'Hello, ThinkPHP!';
});
10. 路由重定向
ThinkPHP 允许你使用路由重定向,将一个 URL 重定向到另一个 URL。
// 将 /old-url 重定向到 /new-url
Route::get('old-url', function () {return redirect('new-url');
});
11. 控制器命名空间
在路由中,通常会指定控制器的完整命名空间。
// 映射到 app\admin\controller\User 的 index 方法
Route::get('admin/user', 'admin/user/index');
12. 路由缓存清理
如果你对路由做了修改,需要清理缓存。
// 清理路由缓存
php think route:clear
总结
ThinkPHP 的路由功能非常强大,你可以通过灵活的路由配置来控制 URL 和控制器方法之间的映射关系。路由配置文件通常在 application/route.php
中定义,可以使用上述示例来帮助你实现常见的路由需求。