一、作用:
简化URL地址,方便记忆;有利于搜索引擎优化
二、模式:
ThinkPHP5.0的路由比较灵活,并且不需要强制定义,可以总结归纳为如下三种方式:
普通模式、强制模式、混合模式
三、路由注册规则
路由注册可以采用方法动态单个和批量注册,也可以直接定义路由定义文件的方式进行集中注册。
1、动态注册
Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');
①路由表达式:
'/' => 'index', // 首页访问路由
'my' => 'Member/myinfo', // 静态地址路由
'blog/:id' => 'Blog/read', // 静态地址和动态地址结合
'new/:year/:month/:day'=>'News/read', // 静态地址和动态地址结合
':user/:blog_id'=>'Blog/read',// 全动态地址
'blog/:year/[:month]'=>'Blog/archive',//可选择地址表达式
'new/:cate$'=> 'News/category',//完全匹配表达式
②路由地址:
方式1:路由到模块/控制 // '[模块/控制器/操作]?额外参数1=值1&额外参数2=值2...'
方式2:路由到重定向地址 // '外部地址'(默认301重定向) 或者 ['外部地址','重定向代码']
方式3:路由到控制器的方法 // '@[模块/控制器/]操作'
方式4:路由到类的方法 // '\完整的命名空间类::静态方法' 或者 '\完整的命名空间类@动态方法'
方式5:路由到闭包函数 // 闭包函数定义(支持参数传入)
③请求类型:
GET GET请求
POST POST请求
PUT PUT请求
DELETE DELETE请求
④路由参数[数组]
method | 请求类型检测,支持多个请求类型 |
ext | URL后缀检测,支持匹配多个后缀 |
deny_ext | URL禁止后缀检测,支持匹配多个后缀 |
https | 检测是否https请求 |
domain | 域名检测 |
before_behavior | 前置行为(检测) |
after_behavior | 后置行为(执行) |
callback | 自定义检测方法 |
merge_extra_vars | 合并额外参数 |
bind_model | 绑定模型(V5.0.1+ ) |
cache | 请求缓存(V5.0.1+ ) |
param_depr | 路由参数分隔符(V5.0.2+ ) |
ajax | Ajax检测(V5.0.2+ ) |
pjax | Pjax检测(V5.0.2+ ) |
⑤变量规则(数组)
ThinkPHP5.0支持在规则路由中为变量用正则的方式指定变量规则,弥补了动态变量无法限制具体的类型问题,并且支持全局规则设置。
2、批量注册
①方法注册
Route::rule([
'路由规则1'=>'路由地址和参数',
'路由规则2'=>['路由地址和参数','匹配参数(数组)','变量规则(数组)']
...
],'','请求类型','匹配参数(数组)','变量规则');
②路由配置定义
除了支持动态注册,也可以直接在应用目录下面的route.php
的最后通过返回数组的方式直接定义路由规则,内容示例如下:
return [
'new/:id' => 'News/read',
'blog/:id' => ['Blog/update',['method' => 'post|put'], ['id' => '\d+']],
];
3、资源路由
5.0支持设置RESTFul
请求的资源路由,方式如下:
Route::resource('blog','index/blog');
或者在路由配置文件中使用__rest__
添加资源路由定义:
return [
// 定义资源路由
'__rest__'=>[
// 指向index模块的blog控制器
'blog'=>'index/blog',
],
// 定义普通路由
'hello/:id'=>'index/hello',
]
设置后会自动注册7个路由规则,如下:
标识 | 请求类型 | 生成路由规则 | 对应操作方法(默认) |
---|---|---|---|
index | GET | blog |
index |
create | GET | blog/create |
create |
save | POST | blog |
save |
read | GET | blog/:id |
read |
edit | GET | blog/:id/edit |
edit |
update | PUT | blog/:id |
update |
delete | DELETE | blog/:id |
delete |
具体指向的控制器由路由地址决定,例如上面的设置,会对应index模块的blog控制器,你只需要为Blog控制器创建以上对应的操作方法就可以支持下面的URL访问:
http://serverName/blog/
http://serverName/blog/128
http://serverName/blog/28/edit
4、快捷路由
快捷路由允许你快速给控制器注册路由,并且针对不同的请求类型可以设置方法前缀,例如
// 给User控制器设置快捷路由
Route::controller('user','index/User');
5、路由别名
路由别名功能可以使用一条规则,批量定义一系列的路由规则。
// user 别名路由到 index/User 控制器
Route::alias('user','index/User');
6、URL生成
ThinkPHP5.0支持路由URL地址的统一生成,并且支持所有的路由方式,以及完美解决了路由地址的反转解析,无需再为路由定义和变化而改变URL生成。
Url::build('地址表达式',['参数'],['URL后缀'],['域名'])
url('地址表达式',['参数'],['URL后缀'],['域名'])