接着来到构造函数的方法中查看。
这里一定要注意第二步的注释,这个已经说了很多次了。
如果有疑问就是为什么使用了ArrayAccess。
咔咔就给大家捋一下,首先App类是继承的Container类。
Container类又继承着ArrayAccess类,所以就可以使用像之前的说,像数组一样访问对象。
- 注入的App类
- 此处使用了ArrayAccess像数组一样访问对象,但是$app中不存在request属性,所以就会去执行容器类中的__get魔术方法,在__get方法中调用的是容器中的make方法,第一个参数为request,最终会返回request的实例。
- 注入的config类
- 此属性返回域名,
- 初始化默认域名
接着就会来到方法setDefaultDomain。
这里需要注意一下咔咔圈的地方,在这一节的开头就使用的这个属性来执行的rule中的addRule方法。
这个group就是think\Route\Domain这个类。
又因为think\Route\Domain继承着think\Route\Group
所以会执行到think\Route\Group到这个类里边。
这下所有的流程就都已经理顺了。
通过上面的这一顿分析和刨铣相信大家对这一块的内容就十分了解了。
四、路由规则预处理
接下来的内容就是对路由规则的处理方式进行解析。
这几个参数就对前俩个做一个简单的打印,然后看一下这俩个参数分别都是什么。
参数rule
参数$route
可以看到这俩个参数几个就是 路由的前半部分,一个是路由的后半部分。
从而就可以得知代码会执行到下图第一处圈起来的地方。
此时需要注意一点就是在上图中圈起来的第二处地方,这个地方会在什么时候执行呢!
就是当下图路由这样设置的时候才会执行那段代码。
这里的路由设置只是为了做演示,在实际工作中不能这样设置路由啊!第二个路由地址会把第一个路由地址给覆盖的。
接着代码就会执行到创建路由规则实例,也就是下图圈出来的地方。
关于创建路由规则实例的几个参数需要进行简单的介绍一下
第一个参数:$this->router
第二个参数:$this,就是指的think\route\Domain。
接下来的几个地址就是路由规则和地址,就没有必要看了,主要就是第一个参数。
接下来就需要进入到创建路由规则实例的方法中
代码就会追踪到thinkphp/library/think/route/RuleItem.php这个类中。
在这个类中做的事情就是设置规则,也就是下图咔咔圈出来的地方。
路由规则预处理setRule方法解读。
上图中最后执行的流程就会来到setRule这个方法。
这段代码没有我们眼看这那么容器阅读,接下来就跟着咔咔一步一步的去阅读这块代码。