ThinkPHP 图说路由

Route 路由

在开启本文之旅的前提,假设你已经配置好了域名以及相关的环境

所谓路由是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器,它的英文名称为Router,是一种连接多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读懂”对方的数据,从而构成一个更大的网络

URL的组成

我们以 http://www.tp5.com/index.php/index/index/show/id/10 为例
url

注意:参数列表是在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地址更简短、更规范、更安全

下面先看一下两种不同的路由模式
router

路由配置我们是知道怎么回事了,那怎么实现传参呢?
urlParam
推荐使用按顺序解析,这样可以使url更短,并且不会将参数名暴露在外。

路由的定义(路由注册)

创建路由的规则

rule

除了注册路由规则的方式还有批量注册路由,注册快捷路由,注册资源路由,注册miss路由等别的方式。这些都是Route类注册路由的方式。
我们也可以使用return数组的方式,注册路由。例如:

return [
    'hello/:name'=>['index/hello', ['ext'=>'shtml'], ['name'=>'\w{2,}']],
];
  • 路由表达式

路由表达式由静态地址和动态变量组成。动态变量可分为以冒号开头的必选变量,例如:id 可选变量[:name]在方法的参数列表中有默认值。

expression

  • 路由地址

路由地址必须是真实合法有效的,路由地址不需要/结尾,路由地址需从项目的入口文件开始。

address

路由到模块/控制器/操作的流程,先完成模块初始化,再逐级解析操作,控制器,模块。而路由到控制器方法则是跳过模块初始化和模块控制器的解析,直接执行操作方法~~

  • 请求类型
请求类型 用途 描述 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
  • 变量规则

Qr1SZ8

本作品采用《CC 协议》,转载必须注明作者和本文链接
今年不学习,明天惨唧唧。
zs4336
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!