use think\facade\Route;
1:注册路由
Route::get('new/<id>/<cate?>','News/detailed');
快捷方式包含:get,post,put,delete,patch,any;<cate?>表示该变量为可选变量;可选参数只能放到路由规则的最后,如果在中间使用了可选参数的话,后面的变量都会变成可选参数。
2:完全匹配
Route::get('new/<id>/<cate?>$','News/detailed');
方法一:路由表达式最后使用$符号,表示该条路由为完全匹配路由
方法二:修改路由配置文件,'route_complete_match' => true
3:路由额外参数传入
Route::get('new/<id>/<cate?>','News/detailed')->append(['status' => 1, 'app_id' =>5]);
如果append方法中的变量和路由规则存在冲突的话,append方法传入的优先
4:路由变量规则
Route::get('new/<id>/<cate?>','News/detailed')->pattern(['id' => '\d+']);
5:路由参数
Route::get('new/:id', 'News/read')->ext('html|shtml')->https(); //后缀为html或者shtml并且要求https协议
Route::get('new/:id', 'News/read')
->option([
'ext' => 'html',
'https' => true
]);
Route::get('new/:id', 'News/read')->denyExt('jpg|png|gif'); //禁止URL后缀为png、jpg和gif的访问
Route::get('new/:id', 'News/read')->domain('news.thinkphp.cn'); //只在news.thinkphp.cn访问时路由有效
ext:URL后缀,支持多个;denyExt:URL禁止后缀检测,支持多个;https:检测是否https请求;domain:域名检测;completeMatch:是否完整匹配路由;model:绑定模型;cache:请求缓存;ajax:Ajax检测;pjax:Pjax检测
6:路由中间件
Route::rule('hello/:name','hello')->middleware(auth); //单中间件
Route::rule('hello/:name','hello')->middleware(['auth','temp']); //多中间件
全局中间件则需在配置文件route.php中设置,则全局生效
'middleware' => [
'auth',
'temp',
]
7:路由分组,把相同前缀的路由定义合并分组
Route::group('admin', function () {
Route::rule('list/:id', 'admin/list');
Route::rule('detailed/:name', 'admin/detailed');
})->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);
8:资源路由,多用于API的RESTFul接口
Route::resource('news', 'News')->vars(['news' => 'news_id'])->only(['index', 'read', 'edit', 'update']);; //vars动态修改默认id,only限制可操作路由(except为除外)
请求类型:[ GET ];访问地址:[ http://url/news/ ];对应方法:[ News->index() ];//列表
请求类型:[ GET ];访问地址:[ http://url/news/create ];对应方法:[ News->create() ];//新增
请求类型:[ GET ];访问地址:[ http://url/news/1 ];对应方法:[ News->read(1) ];//读取
请求类型:[ GET ];访问地址:[ http://url/news/1/edit ];对应方法:[ News->edit(1) ];//修改
请求类型:[ POST ];访问地址:[ http://url/news/ ];对应方法:[ News->save() ];//处理
请求类型:[ PUT ];访问地址:[ http://url/news/1 ];对应方法:[ News->update(1) ];//更新
请求类型:[ DELETE ];访问地址:[ http://url/news/1 ];对应方法:[ News->delete(1) ];//删除
9:全局MISS路由,没有匹配到所有的路由规则后执行一条设定的路由
Route::miss('public/miss');