ThinkPHP 图说路由
Route 路由
在开启本文之旅的前提,假设你已经配置好了域名以及相关的环境
所谓路由是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器,它的英文名称为Router,是一种连接多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读懂”对方的数据,从而构成一个更大的网络
URL的组成
我们以 http://www.tp5.com/index.php/index/index/show/id/10
为例
注意:参数列表是在url参数配置 'url_param_type' => 0
的前提下
路由的模式
TP5已经废弃传统URL模式,全部采用PATH_INFO模式
模式 | 举例 |
---|---|
传统URL模式 | http://www.tp5.com/index.php?m=index&c... |
PATH_INFO模式 | http://www.tp5.com/index.php/index/index/s... |
关于怎么隐藏入口文件 index.php
,在此就不再叙述,可以参考官方文档
PATH_INFO模式的优点:
- 缩短了URL
- 与静态网页地址几乎完全一样,这样就达到了欺骗搜索引擎,提高网页收录效果,利于网站优化与推广
开启路由
了解了PATH_INFO模式的URL的优点之后,但还是觉得url长,不是那么的优雅,我们可以借助路由功能实现更加简短,辨识度高的url。比如上面提到的url可以简化为http://www.tp5.com/show/10
。
TP5.1版本的配置与TP5的配置文件稍有不同。我使用的版本是v5.1.39 LTS
。版本默认URL是使用混合模式,也就是同时支持PATH_INFO模式。
那为什么推荐使用路由呢?因为使用路由使URL地址更简短、更规范、更安全
下面先看一下两种不同的路由模式
路由配置我们是知道怎么回事了,那怎么实现传参呢?
推荐使用按顺序解析,这样可以使url更短,并且不会将参数名暴露在外。
路由的定义(路由注册)
创建路由的规则
除了注册路由规则的方式还有批量注册路由,注册快捷路由,注册资源路由,注册miss路由等别的方式。这些都是Route
类注册路由的方式。
我们也可以使用return
数组的方式,注册路由。例如:
return [
'hello/:name'=>['index/hello', ['ext'=>'shtml'], ['name'=>'\w{2,}']],
];
- 路由表达式
路由表达式由静态地址和动态变量组成。动态变量可分为以冒号开头的必选变量,例如:id
可选变量[:name]
在方法的参数列表中有默认值。
- 路由地址
路由地址必须是真实合法有效的,路由地址不需要/
结尾,路由地址需从项目的入口文件开始。
路由到模块/控制器/操作的流程,先完成模块初始化,再逐级解析操作,控制器,模块。而路由到控制器方法则是跳过模块初始化和模块控制器的解析,直接执行操作方法~~
- 请求类型
请求类型 | 用途 | 描述 | URL格式 |
---|---|---|---|
GET | 从服务器端获取数据 | 仅查询,不修改,类似:SELECT操作 | URL?参数表 |
POST | 在服务器端创建数据 | 提交并创建新信息,类似:INSERT操作 | URL |
PUT | 改变服务器端数据 | 仅修改不创建,类似:UPDATE操作 | URL?参数表 |
DELETE | 删除服务器端资源 | 根据条件删除数据,类似:DELETE | URL?参数表 |
- 路由参数
路由参数主要完成路由匹配检测以及行为执行
路由参数可以在定义路由规则的时候直接传入(批量),不过5.1采用了更加面向对象的方式进行路由参数配置,因此使用方法配置更加清晰
参数 | 说明 | 方法名 |
---|---|---|
method | 请求类型检测,支持多个请求类型 | method |
ext | URL后缀检测,支持匹配多个后缀 | ext |
deny_ext | URL禁止后缀检测,支持匹配多个后缀 | denyExt |
https | 检测是否https请求 | https |
domain | 域名检测 | domain |
before | 前置行为(检测) | before |
after | 后置行为(执行) | after |
merge_extra_vars | 合并额外参数 | mergeExtraVars |
complete_match | 是否完整匹配路由 | completeMatch |
model | 绑定模型 | model |
cache | 请求缓存 | cache |
param_depr | 路由参数分隔符 | depr |
ajax | Ajax检测 | ajax |
pjax | Pjax检测 | pjax |
response | 绑定response_send行为 | response |
validate | 绑定验证器类进行数据验证 | validate |
header | 设置Response的header信息 | header |
append | 追加额外的参数(5.1.5+) | append |
middleware | 注册路由中间件(5.1.6+) | middleware |
merge_rule_regex | 合并路由规则(V5.1.6+) | mergeRuleRegex |
filter | 请求变量过滤(V5.1.16+) | filter |
- 变量规则
本作品采用《CC 协议》,转载必须注明作者和本文链接