ThinkPHP检测URL路由深度解析深度分析thinkphp检测网址路由,
前言
,由于文章篇幅太长,写了一篇新文章。
在前一篇文章中,我向您解释了以下内容。
浅析路线初步识别;说说在facade route definition rule方法中$this-group到底执行了什么路由;规则预处理分析生成路线识别的快速访问;不过,路线部分还有很多内容需要说明,接下来将分析以下内容。
路由配置(即在路由文件中返回)。调度首先知道路由检查,以检测网址路由。。接下来,我们将逐一详细解释。
另外,我会给你看一个关于路由的执行图,供你参考。
路由流程
一、dispatch初认识以及route-check 检测URL路由
的执行在执行应用程序中。接下来卡卡给大家简单了解一下。
本节没有对源代码进行解释,但这只是为了为以后的使用铺平道路,因此有必要知道调度是怎么的事情
下图显示了路由初始化后返回上层继续的流程。
然后会执行到路由检测。
下图用于调度的初始位置路由测试
路由测试用例,然后我们可以打印这个调度信息
打印数据
打印结果有关派单的相关值已在上图中打印出来
接下来,将给出routeCheck方法的简单预览
上述方法中的RouteCheck只需要明确缓存将在这一步处理,并返回一个Dispatch对象。
你可以简单的看一下这一块的源代码,不是很重要。
路由检查检测网址路由
但是这一块的内容还是需要简单的看一下。
在阅读之前,你需要弄清楚这两个参数是什么。
参数1:路由规则
参数2:检查是否配置了强制路由
在返回一个调度对象,并且知道了参数的含义之后,你需要去check方法了解一下。
检测网址路由在这个方法中,关于自动检测域名路由,让我们打印出数据的样子。
事实上,返回的结果与前面路由和装载资源的方式相同。
然后,打印结果将通过路径信息分隔符:在网址中更改为
它将获取配置文件中的路由是否完全匹配
最终执行使用默认路由解析
这里不需要深入分析细节。关于路由的细节太多。要花很多时间一个一个的关注细节。
所以这一块的内容就在这里,只需要知道执行了什么,最后返回了什么。
二、request类是如何找到的
在前一节,$ result=$ domain-check($ this-request,$ URL,$ complete match);将执行该块的内容。
我不在乎这个方法在这里做什么。
相反,我们需要关心这个$ this-请求是否被找到并执行。
我们首先看到的是Route类中有一个请求属性。
请求对象的属性然后到达路由的构造器,在那里你会发现一个新的世界。
这里的ArrayAccess是用来访问数组之类的对象的,但是$app中没有request属性,所以会执行容器类中__get这种神奇的方法。容器中的make方法在__get方法中调用,第一个参数是request,它最终将返回一个request的实例。
这里的Constructor $App实际上是一个通过依赖注入的App实例。
看了这么多源代码,一定知道App类继承了Container类,也就是容器类。
容器类的底部有几个神奇的方法。
这里只需要注意__get方法。
Magic method __get方法是访问不存在的属性时将执行的函数。
也就是说,make方法最终会被执行。
容器类中的make方法最终将通过一系列操作返回请求的实例。
并将此实例存储在容器中,并在下次使用时直接获取它。
容器类中的Make方法是容器类中一个特别重要的方法,也是一个灵魂方法。
整个框架的所有实例都是通过容器返回的,不用说这个方法的重要性。
卡卡之前对容器有很深的了解,以文章的形式呈现给大家。
三、检测域名路由
,先给大家画流程,然后按照流程和这个卡卡的节奏。
在域名检测的流程图表中,首先应该确认的一件事是,域名路由的检测是在执行应用程序中执行的。
流程的上层实现是入口文件所在的地方。
当执行一个应用程序时,代码将被执行到routeCheck方法中,所以先看看这个文件。
先看笔记。这个方法的解释是URL路由检测。
在这种方法中,将首先检测路由缓存,这是关于缓存的。
这个方法最重要的是路由检测返回一个Dispatch对象,就是这个方法。
URL路由检测,那么接下来就是看这个方法了。
首先要明确的是这两个参数是什么。
$ path : string(4)‘blog’$ must : bool(false)
路由检测在检测URL路由时可以做以下几件事。
Pathinfo分隔符:将url中的/更改为|路由是否完全匹配。检测域名路由的默认路由解析。接下来,我们只需要深入分析检测到的域名路由的流程。
关于前两次执行,只是一些字符串处理,看看就知道最后会返回什么了。
检测网址路由还阐明了在执行检测域名路由时三个参数的含义。
$this-request:通过容器类的__get magic方法,执行容器类的make方法,最后返回请求的实例对象。本专栏不会去看第6节的文章$ url : string(4)‘blog ‘ $ complete match :是否完全匹配$ result=$ domain-check($ this-request,$ URL,$ Here,也就是本节的重点。
在这个方法中,下面的流程将被执行,重要的流程将被深入分析。
检查路由别名:检查路由检查网址绑定:检查网址绑定判断路由参数添加域名中间件检查数据包路由:父项:3360检查
检测域名路由,检测路由别名:检查路由
参数解释
$ request:request类$url的一个实例:在这个方法中有两个知识点需要在传递的博客中澄清
Strpos:查找字符串中的第一个匹配项strstr : strstr返回string1,strtr(‘ Helloworld!’)中string2的第一个匹配项的指针,‘世界’);\n输出:\ n世界!首先处理网址:返回blog得到别名路由定义NULL,以资源路由blog为例返回false
检测路由别名有一种检测路由别名的方法需要考虑
参数是上图介绍的博客
要让别名路由定义达到这个方法,首先要明确的是,这个方法在类think PHP/library/think/route . PHP中。
这个类使用think\route下的所有类
此方法将从检测中获取博客Roadled,然后在Road类的别名属性中获取它。如果它不存在,将返回空值
下面将提到这个别名的使用
获取别名路由定义,并返回到最后一个返回$项来检测别名路由。$item-check($request,$ URL): false;也就是说,这一行代码,从上图中可以看出,该项为空
最后将这个空值返回给。
检查网址绑定:检查网址绑定
参数描述
$ request:request类的一个实例$url:传递的博客将只详细解释下图中圈出的地方。
测试URL绑定来到getBind方法读取路由绑定,可以看到卡卡已经打印了传入的参数。
这个方法在类thinkphp/library/think/route/domain . PHP中,记住设置规则路由的$This-group是使用的类。不知道的可以去路线文章第一节。
同时,在该方法中,当前子域被获取一次。
用这种方法,你最终会回到www,主要看第一个圈起来的部分。
通过请求类中的host方法获取当前域名,然后拆分。
返回数据:数组(1) {[0]=\ n字符串(3)’ www’ \ n}
给子域赋值:$ this-子域
返回最终结果并返回子域名:www
然后,所获取当前子域名称将返回到上层,且所获取的当前子域名称WWW将在上层被判断。
有的都是判断,第一个判断肯定不会成立,因为只返回www,而不是。
下面的判断是基于路由绑定的,这里你只需要知道总是会返回NULL。
做出的判断知道底层返回NULL,所以这里的判断不会成立,所以返回上层的最终结果是假的。
检测网址绑定并判断路由参数
按照上图执行流程最终会返回thinkphp/library/think/route/domain . PHP,这是检查和检测域名路由的方法。
然后开始判断路由参数。
没有路由参数,不执行跳过。
有路由参数:execute方法setRouteVars:设置路由变量。此参数只能在框架版本高于5.1.5时使用。由于卡卡用的版本有点低,就不详细解释了。
检测域名路由
文档添加域名中间件
这里也不解释中间件,因为后面会开一篇新文章详细解释,这篇文章还是以路由为主!
检测数据包路由
然后它将到达最后一个流程来检测域名路由,并执行代码return parent :3360 check($ request,$ URL,$ complete match);
将跳转到类文件:think PHP/library/think/route/RuleGroup . PHP,因为Domain类继承了RuleGrouP类。
参数描述
$ request:request class $ URL的实例:传递的blog$completeMatch :路由是否完全匹配。在这种方法中,将只详细解释流程中的一个,即分组参数将被合并。
因为这种方法也是贯穿流程,实施的一条主线,所有其他方法都是测试和判断。
合并分组参数
四、总结
。关于路由的两篇文章还没写完。看了这么久的源代码,就是路由最复杂,最难理解。
其中类是一个一个的,路由先暂时了解这个,然后在阅读其他源代码的时候补充其他内容。
我们必须仔细阅读《路由》一文中主要执行的流程图表。
流程图的执行是,当注册路由规则,时,域类最终通过组属性返回,这里的内容必须是清楚的。
主要知道路由中域名的配置流程,以及域名是什么时候配置的。
路由文件中的返回数组和导入路由文件中的流程应该有一个清晰的概念。
然后,回头看看ArrayAccess,这是你以前学过的,像数组一样访问对象。
容器中的magic method __get方法,其中有一个make方法,主要用于返回一个类的实例,并将其存储在容器中。
暂时就说到路由。预计路由将在一篇文章中完成。
“坚持学习、写博客、分享是卡卡从职业生涯开始就一直坚持的信念。希望诺大互联网的卡卡文章能给你带来一点帮助。这是卡卡。下次见。
“以上是Thinkphp检测到的URL路由深度解析的详细内容。请多关注雷其他关于PHP知识的相关文章!