在上文执行完的过程中会发生几种情况,咔咔这里给大家整理一下,由于写的比较多怕有时候看的时候就混淆了。 第一种情况 没有任何路由参数和路由规则,就单纯的路由地址。 在这里打印一下检测URL和规则路由是否匹配的返回结果,以下的几种情况都使用的同一个地方打印,就不在写第二次了。 也就是当路由地址为纯路由地址时返回的是一个空数组。 第二种情况 设置有路由参数并且是必选参数,会返回参数和值并且是数组形式。 第三种情况 设置有资源路由参数并且是必选参数,会返回参数和值并且是数组形式,如果没有参数则返回false。 接下来在进入到本节的正题,为什么要做对以上的三种情况做出声明,请看下图咔咔圈出来的地方。 以上三种情况的打印结果就是 不会在去执行解析匹配到的规则路由这一步骤。 在这里会执行几个动作,分别为 而且我们要学习的就是解析匹配到的规则路由这个里边的内容。 使用以下路由作为案例进行执行流程。 解析匹配到的规则路由 参数说明 执行文件:thinkphp/library/think/route/RuleItem.php,行号202. 接着就会进入到方法 由于路由参数是没有设置的所以不会去执行上边的那部分,接下来会对圈起来的地方进行深入的解析。 在这里主要就是替换路由地址中的变量。 这里的route和match这俩个值在上边的参数就已经做出说明了,可以翻上去看一下。 可以肯定的是肯定这个判断肯定会进行执行。 这里注意一下中间的部分,可以看到 路由规则后边的参数是可选的,所以说这俩个值分别为以下,请看图。 然后通过str_replace() 函数替换字符串中的一些字符(区分大小写)。 最后返回的route就是 接下来就是咔咔圈出来的地方,这块主要就是运用PHP函数来对请求地址进行的处理。 这里有一个方法作用是解析URL地址中的参数Request对象,但是因为URL在这里是个空值所以不会去执行。 在将三个值进行赋值,然后就开始执行了路由调度。 本节就简单说到这里,在本节主要就是解析匹配到的规则路由,接下来就是进行路由调度。 路由调度是路由这块的最后一个流程,也是连接控制器的一个点,接下来咔咔会对路由调度进行详细解析。 续集 在 路由地址设置为如下。 此时在来打印一下刚刚那块的代码查看一下变化,到底有什么作用。 最后就是通过 这里有一个非常重要的一个点就是关于 如果你之前没有使用过这种方式,请自行搜索或者持续关注咔咔的发文,你会看到你想要的。 在路由的这一节中这是咔咔最后讲解的一个重点,路由调度。 路由调度完就是控制器的执行了,不是说路由设置完就可以直接访问的。 在 执行文件 : thinkphp/library/think/route/Rule.php 763行. 参数说明 那么就来到发起路由调度的方法来进行深度解析。 在这个方法中咔咔只对最常用的方式进行解析了,其它的方式根据自己阅读源码的方式进行阅读即可。 来到解析URL地址为 模块/控制器/操作中。 关于这个list的使用在源码中也出现了很多次了,咔咔将打印结果给大家展示出来。、 打印的数据为 接下来在一张图中进行打印 从下图中就可以看到list其实就是将数组的索引值赋值给list中的俩个变量而已。 接下来就是获取操作,控制器,模块。 函数 控制器也是用同样的操作。 模块是会在配置文件中获取,最终也是通过 至于使用请求类来获取请求方式,这个在后期会进行解析,这里只需知道返回的是请求方式即可。 最终的返回结果如下图。 在这里有一个问题,就是关于类的调用问题,跟这咔咔的节奏一点一点追踪。 路由到模块/控制器/操作类的调用关系 追踪这个函数第一步是进入到了类 然后在进行追踪Modul这个类。 又因为这个类继承着Dispatch这个类,所以还需要在继续追踪。 来到 然后在通过本类 在这里可以对这个返回结果做一个调试看一下结果。 通过结果就知道最终就是从这里返回过去的。 路由调度的解析在这里就结束了,但是经过了一层一层的深扒已经进入到了框架的最底层位置了。 这个时候突然给返回了一个值,是不是有点懵,这是返回到哪里去了。 根据咔咔画的思维导图先来捋一遍。 所以说根据咔咔的导图最开始的位置就是 如果图不清晰请及时在评论区见。 也就是返回到了下图位置。 然胡使用咔咔提供的神器来打印一下执行流程。 这里跟上边那个无序列表时反向的,跟这个流程执行也是一一致的。 截止到这里关于路由的所有内容就结束了,在路由这节有很多的内容,也不会去全面的解读,抓住要点进行解析即可。 在这一节中主要针对解析匹配到的规则路由-路由地址动态处理,主要就是针对不同的路由规则参数,返回不同俩种结果。 主要就是针对上文中的一种情况就是路由规则和路由地址都带有参数时对参数进行的处理。 然后使用array_pop进行获取模块控制器方法,最终执行到路由调度。 在路由调度后一定要清晰的知道关于返回值是返回给了哪里,对执行的流程一定明确,可以根据咔咔给出的导图,或者使用神器来打印也可以。 路由源码解析到这里就大结局了,从应用初始化开始到路由调度返回值,这一个过程中有很多的过程,咔咔也仅仅是针对重要的进行了解析。 后期如有时间也会对其它情况进行详细的说明,路由这块也是框架最复杂的一部分,希望可以好好进行理解。
一、解析匹配到的规则路由-路由地址动态处理
$match这个的值,所以当$match值为false时整个流程会直接返回false。
$request : object(think\Request) 请求类parseRule这个里边,这个方法的功能就是解析匹配到的规则路由,参数就是咔咔上边给写出来的六个参数。$replace和$search执行了俩次。其实就是针对路由规则后边的地址进行了俩种方案。string(17) "index/index/hello"解析匹配到的规则路由中存在这行代码,在上文中没有做出对应情况说明,接下来对这种情况做出说明。str_replace进行替换的,所以并将参数换成hello。str_replace这个函数的高级使用,平时都是用一个字符串替换另一个字符串,但是在本案例中是数组替换数组的方式。
二、路由调度
解析匹配到的规则路由的最后一步就会执行路由调度。
$this->parseUrlPath($route);$path和$var的值,你们就知道这个list是怎么使用的。array_pop就是返回数组的最后一组数据然后返回,在这里也就是返回的操作。array_pop来进行获取的。thinkphp/library/think/route/Rule.php这里thinkphp/library/think/route/Dispatch.php就可以看到这个构造函数,到这里也就是最后一步了。thinkphp/library/think/route/Dispatch.php的init方法,返回本类,也就是上层打印出来的结果。
三、路由调度的最终结果返回给了谁?
$this->routeCheck()->init()
总结
0
0
相关文章
thinkphp如何配置伪静态隐藏index.php
thinkphp数据库迁移和数据填充怎么用
thinkphp查询作用域(scope)如何简化查询
thinkphp session无法保存或跨控制器失效怎么办
thinkphp如何防止SQL注入和XSS攻击
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。
5
2026.03.04
2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!
12
2026.03.04
本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。
33
2026.03.03
本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。
25
2026.03.03
Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。
77
2026.02.28
Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。
60
2026.02.28
Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。
48
2026.02.28
本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。
26
2026.02.27
本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。
20
2026.02.27
热门下载
相关下载
精品课程
共12课时 | 0.7万人学习
共18课时 | 1.3万人学习
共11课时 | 0.7万人学习






































