最近在使用ThinkPHP6做项目的开发,故整理了一些常用的路由使用方式,
可以方便之后的使用。
目录
引用路由门面
基础路由
快捷路由
规则表达式
静态地址
静态结合动态地址
方法设置
完全匹配
默认路由规则
设置完全匹配
路由别名
变量规则
局部变量规则
全局变量规则
重定向路由
路由到模板
强制路由
引用路由门面
use think\facade\Route;
基础路由
Route::rule('路由表达式', '路由地址', '请求类型');
所有请求类型皆可访问
Route::rule('user', 'User/index');
只能get访问
Route::rule('user', 'User/index', 'GET');
get/post都能访问
Route::rule('user', 'User/index', 'GET|POST');
注意:请求类型参数不区分大小写
快捷路由
Route::快捷方法名('路由表达式', '路由地址');
类型 | 描述 | 快捷方法 |
GET | GET请求 | get |
POST | POST请求 | post |
PUT | PUT请求 | put |
DELETE | DELETE请求 | delete |
PATCH | PATCH请求 | patch |
HEAD | HEAD请求 | head (V6.0.13+) |
* | 任何请求类型 | any |
示例如下:
Route::get('user','User/index');
Route::post('user','User/index');
Route::put('user','User/index');
Route::delete('user','User/index');
Route::any('user/detail','User/detail');
规则表达式
静态地址
Route::get('user', 'User/index');
静态结合动态地址
Route::get('user/detail/:name', 'User/detail');
Route::get('user/:name/:gender', 'User/test');
方法设置
public function detail($name = 'ThinkPHP6')
{
return 'hello, This is ' . $name . ' detail page!';
}
public function test($name, $gender)
{
echo $name;
echo '<br/>';
echo $gender;
}
完全匹配
默认路由规则
Route::get('user', 'User/index');
默认路由规则不要求全部匹配,则下面两种都可访问
(1)http://serverName/user
(2)http://serverName/user/2
设置完全匹配
Route::get('user$', 'User/index');
之后只能路由(1)访问
路由别名
给路由设置别名,注意要确保全局唯一
例如:
Route::get('user/detail/:name', 'User/detail')->name('detail');
控制器或视图生成地址时可以:
url('detail', ['name' => 'ThinkPHP6']);
默认生成地址:
url('user/detail', ['name' => 'ThinkPHP6']);
变量规则
局部变量规则
仅在当前路由有效:
// 匹配字母、数字、中文和下划线字符
Route::get('user/detail/:name', 'User/detail')->pattern(['name' => '[\w]+']);
// 匹配数字
Route::get('user/delete/:id', 'User/delete')->pattern(['name' => '[\d]+']);
全局变量规则
// 批量匹配设置
Route::pattern(['name' => '\w+', 'id' => '\d+',]);
Route::get('user/detail/:name', 'User/detail');
Route::get('user/delete/:id', 'User/delete');
重定向路由
Route::redirect('user/delete/:id', url('user/detail', ['name' => 'ThinkPHP6']), 302);
路由到模板
// 没有模板变量
Route::view('user/detail', 'user/index');
// 传递模板变量
Route::view('user/detail', 'user/index', ['name' => '张三']);
// 动态路由+模板变量
Route::view('user/:name', 'user/index', ['name' => '张三']);
强制路由
为防止设置路由不生效,可以修改config/route.php
开启全局强制路由、路由完全匹配选项
开启全局完全匹配后,如果需要对某个路由关闭完全匹配,可以使用
Route::get('user/detail/:name', 'User/detail')->completeMatch(false);
在这里只是列举了一些常用的路由类型和参数设置,实际上还有很多,有兴趣的话可以了解一下。