php路由解析出参数,ThinkPHP路由参数以及资源路由解析

路由是项目开发中比较重要的一个环节,每个项目都会使用路由进行管理接口,接下来本文会从源码方面带大家一起学习路由。”

一、路由参数和变量规则

同样代码先从这里开始,但是这次的关注点是在路由参数和变量规则上。

这俩个点只是简单的给大家说明一下使用和简单的执行流程。

比较深的理解就不去说明了, 因为这俩个点在平时开发过程中是不怎么使用的。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第1张图片注册路由规则

在上文中还记得在文件thinkphp/library/think/route/RuleItem.php中我们看到过关于路由参数的使用吧!php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第2张图片关于路由参数处理的地方

并且文档中也给了很多支持的参数,如下图。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第3张图片文档支持的参数

那这个路由参数是怎么使用的呢!

接着使用之前我们使用的路由,并且给设置上URL后缀检测,支持匹配多个后缀。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第4张图片路由案例

那么我们设置的这个路由应该怎么访问呢!

如果按照正常的路由规则进行访问是会报错的,正确的访问方式请继续看。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第5张图片访问结果

正确的请求地址应该为http://www.source.com/index.php/hello/1.html,也就是在请求地址上需要拼接我们设置的后缀html。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第6张图片访问结果

这块的具体执行流程使用代码追踪器简单的看一下即可,咔咔这里就不做演示了。

对于路由参数咔咔这里在给大家演示一个案例,就基本结束了。

全局路由参数

路由参数这块最后一个说明的就是全局路由参数。

直接来到文档就可以看到。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第7张图片全局路由参数

这里咔咔设置俩个路由规则做测试,一个参数可选,一个必选,并且设置上路由规则添加文件后缀。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第8张图片路由文件

传参数时的请求地址。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第9张图片访问结果

不传参数的请求地址。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第10张图片访问结果

以上就是针对路由参数写的内容。

没有去做特别深的讲解,基本就是说明了怎么使用,有这个东西的存在,所以了解即可。

变量规则

同样的变量规则,这个在咔咔的日常开发工作中是更不可用的。

变量规则咔咔认为唯一的好处就是对参数进行过滤。

也就是说变量规则是在路由规则存在参数时才会存在的行为。

咔咔这里给大家提供一个简单的案例即可。

演示的案例php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第11张图片路由文件演示的案例

在路由后边追加参数pattern

那么接下来看一下这个请求如何写。

当参数为数字时可以输出传入的参数。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第12张图片第一次请求地址

但是当传入字母的时候就会报错。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第13张图片打印结果

所以说变量规则就是对路由规则后的参数进行的过滤,也就是使用正则进行处理的。

截止到这里关于路由参数和变量规则就简单的说到这里了。

虽然说内容很简单,大多数都是使用案例给大家介绍怎么使用,没有去对源码进行深究。

第一平时开发不怎么会去使用。

第二在后文中还需要进一步深入了解,这里只是做一个认识。

其实说到这里估计还是有很多人不明白,为什么输入路由地址就可以出现对内的内容,这个后期会进行深入的了解。

二、资源路由

资源路由的设置也是很简单。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第14张图片路由文件

同时使用命令行来创建文件也更是方便。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第15张图片使用命令进行创建文件

创建的控制器本身就是一个资源路由文件。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第16张图片资源路由控制器

接着还是会执行到Route文件的resource方法。

这个方法同样会有路由规则、路由地址、路由参数、变量规则。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第17张图片注册资源路由

接着就会来到thinkphp/library/think/route/Resource.php类

在这个类中及时做一些简单的属性赋值。

再就是咔咔圈出来的地方,接下来咔咔会对圈出来的地方进行说明。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第18张图片thinkphp/library/think/route/Resource.php

由于resource类继承这RuleGroup类,所以会跳转到thinkphp/library/think/route/RuleGroup.php类里。

来到这个方法执行的动作。会对路由规则进行简单的处理,如果路由存在参数则需要把路由规则转换为blog/ 或者 blog/

接着就是对$this->parent解释,这里为什么是object(think\route\Domain),需要需要路由文章的第一篇第三节,并且在这一步就会对fullName进行赋值。

最后一步就是进行对fullName进行赋值,其实就是将路由规则赋值给fullName。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第19张图片设置分组的路由规则

然后在就返回上层看接下来的东西。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第20张图片返回上层文件继续阅读源码

设置分组的路由规则处理完之后就是对一些属性进行赋值,主要为一下三个。路由变量规则

路由参数

REST路由方法定义

属性赋值就没有什么说的了,就是需要明白对应的属性做的事情即可。

在紧接着就是会以请求方式为键值 以$this为值 返回本类实例,并且会进行检测此路由方法是否为注解路由。

返回的结果咔咔打印出来给大家简单的看一下,内容没有截取全,知道这个值是什么就行了。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第21张图片返回结果

以上执行完之后就会返回上层去执行lazy方法

首先知道这个传入的这个参数是什么:路由是否延迟解析php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第22张图片执行完返回上层的代码

接着就会来到lazy方法php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第23张图片lazy方法

在这个方法中会去调用parseGroupRule,并且传入的参数就是分组的路由规则

这块的内容就是关于路由分组的,这里就不走探讨了。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第24张图片分组的路由规则

直到这里关于资源路由就简单说到这里

最后咔咔将执行脑图给大家画出来php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第25张图片资源理由执行流程

三、关于域名是什么时候设置的

其实在上节中存在一行这样的代码$this->parent->getDomain()

这行代码根据方法名字都知道是获取请求域名的

但是都知道这个域名是在哪里进行设置的吗?

当你请求这个资源路由时,就会执行到Route类的构造函数php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第26张图片资源路由

在构造函数里边有这样一行代码,就是来获取请求域名的php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第27张图片构造函数

就会来到host方法

在host方法中,这个参数为true

这里只需要关注$this->server('HTTP_HOST')即可,就是用来获取域名地址的

在咔咔圈出来的第二处可以看到,第一个条件是成立的,但是第二个条件是不成立的

所以会直接返回上一步获取出来的$this->hostphp路由解析出参数,ThinkPHP路由参数以及资源路由解析_第28张图片host方法

打印$this->host,这里为什么会执行俩次就不对此解释了,有疑问的可以使用函数debug_backtrace来进行查看。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第29张图片打印结果

紧接着就会执行初始化默认域名这个方法

也就是在这里对域名进行了初始化php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第30张图片初始化默认域名方法

此时还会有疑问就是明明是在thinkphp/library/think/route/Resource.php这个类里边执行的啊!

设置域名地址是在thinkphp/library/think/Route.php这个类里边的啊!

关于这个一想就能明白是因为继承关系的啦!php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第31张图片thinkphp/library/think/route/Resource.php

那么到这里对于这个域名的设置应该就很清楚了,如果还不明白就多看看咔咔写的文章哈!

咔咔写一篇文章估计需要几个小时,但是你们看也就几分钟,几分钟能看个啥啊!

对着代码慢慢,要的是质量,不是效率哈!

那么截止到这里关于域名是在什么时候设置的就讲解完了,接下来会对路由配置-数组方式配置解读

四、路由配置-数组方式配置解读

其实这里估计很多人看了后都会有点懵。

大多数都是不理解,这是什么意思,这玩意在哪!

其实这个配置是在5.1之后才有的,咔咔翻过之前的版本是不存在这个配置的。

这个配置的位置其实就是咱们一直学习的Route路由里边,没想到吧!就是这么强大。

就是路由配置里边的那个return。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第32张图片路由配置文件

在回顾一下路由文件的加载吧!

首先是入口文件,这个是毫无疑问的。

咔咔圈起来的地方会返回App的这个实例,如果有不明白的可以去看容器那一篇文章。

所以这行代码会执行到App类的run方法。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第33张图片入口文件

那么来到thinkphp/library/think/App.php这个类的run方法看一下。

能直接看到的就是初始化应用。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第34张图片初始化应用

来到初始化应用就可以看到关于路由初始化php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第35张图片路由初始化

来到routeInit方法

在导入路由配置时是对其有过一次判断,这里的判断就是针对的路由配置文件中的数组方式配置。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第36张图片导入路由配置

到这里关于路由配置什么时候加载的应该就有一定的了解了。

但是关于数组方式配置路由在文档中是没有提到的,也就是说并没有使用案例。

所以我们就需要在根据import这个方法进行追踪。

直接找到使用方法即可。

这里关于$this->route->import($rules);这行代码,咔咔在做一次解释。

其实也就是$this->route为什么可以执行到Route类。

首先我们需要先知道的就是App类是继承这Container类的php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第37张图片继承关系

然后在Container类的最后存在几个魔术方法。php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第38张图片Container魔术方法

当App中调用不存在的Route类时就会执行这个__get这个魔术方法。

然后就会执行__get魔术方法中的make方法。

关于这个方法,咔咔说过了不下三次了,可以去看容器那一篇文章哈!php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第39张图片容器类中的make方法

接着继续我们的行军之路,来到thinkphp/library/think/Route.php的导入配置文件的路由规则,方法import

在这个方法中可以看到几个熟悉的变量规则

那么使用这几个值进行简答的测试一下php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第40张图片检测导入配置文件的路由规则

刚好在第二节中对资源路由进行了说明,那么接下来就使用检查资源路由为条件进行测试

一定要把之前设置的资源路由配置给关闭,否则是无法进行测试的php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第41张图片路由配置文件

这个时候进行一次访问

没错,就是这样,使用起来就是如此的简单php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第42张图片访问结果

其实数组方法配置路由就跟资源路由是一样的,只不过是执行的顺序而已

最终也是通过循环将路由规则传递给resource方法php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第43张图片执行resource

同样也是执行的这个方法php路由解析出参数,ThinkPHP路由参数以及资源路由解析_第44张图片resource方法

本节就简单的聊到这里,主要就是对路由初始化需要有一定的理解

并且学会使用路由数组方式的配置

这种方式不论是在之前的版本还是5.1还是发布的6.0版本都是不经常使用的,也可以说是根本不会用到的

这里提到只是为了给大家在温习一下路由初始化的过程,和知道数组配置路由到底是干什么的

哪里有疑问就要解决哪里,而不是放着不去解决

你可能感兴趣的:(php路由解析出参数)