ThinkPHP路由源码解析(二)(1)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: ThinkPHP路由源码解析(二)

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

框架路由解析



前言

由于文章篇幅的原因,执行在新开一篇文章进行写。


在上一篇中给大家讲解了以下内容。


路由初识化简单分析

通过定义路由再谈门面

路由定义rule方法中的$this->group到底执行了什么

路由规则预处理

解析生成路由标识的快捷访问

但是在路由这块还有很多的内容要来讲解,接下来就会针对以下内容进行解析。


路由参数

变量规则

资源路由

路由配置(就是在route文件中的return中)

dispatch初认识

route-check 检测URL路由

。。。。。。。。。。。。。

接下来就一个一个进行详解。


同样给大家放一个关于路由的执行图,供大家进行参考。


image.png


一、路由参数和变量规则

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


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


比较深的理解就不去说明了, 因为这俩个点在平时开发过程中是不怎么使用的。


image.png


在上文中还记得在文件thinkphp/library/think/route/RuleItem.php中我们看到过关于路由参数的使用吧!


image.png


并且文档中也给了很多支持的参数,如下图。


image.png


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


接着使用之前我们使用的路由,并且给设置上URL后缀检测,支持匹配多个后缀。


image.png


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


如果按照正常的路由规则进行访问是会报错的,正确的访问方式请继续看。


image.png


正确的请求地址应该为http://www.source.com/index.php/hello/1.html,也就是在请求地址上需要拼接我们设置的后缀html。


image.png


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


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


全局路由参数


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


直接来到文档就可以看到。


image.png


这里咔咔设置俩个路由规则做测试,一个参数可选,一个必选,并且设置上路由规则添加文件后缀。


image.png


传参数时的请求地址。


image.png


不传参数的请求地址。


image.png


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


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


变量规则


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


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


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


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


演示的案例


image.png


在路由后边追加参数pattern


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


当参数为数字时可以输出传入的参数。


image.png


但是当传入字母的时候就会报错。


image.png


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


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


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


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


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


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


相关文章
|
15天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
45 2
|
15天前
|
存储 安全 Linux
Golang的GMP调度模型与源码解析
【11月更文挑战第11天】GMP 调度模型是 Go 语言运行时系统的核心部分,用于高效管理和调度大量协程(goroutine)。它通过少量的操作系统线程(M)和逻辑处理器(P)来调度大量的轻量级协程(G),从而实现高性能的并发处理。GMP 模型通过本地队列和全局队列来减少锁竞争,提高调度效率。在 Go 源码中,`runtime.h` 文件定义了关键数据结构,`schedule()` 和 `findrunnable()` 函数实现了核心调度逻辑。通过深入研究 GMP 模型,可以更好地理解 Go 语言的并发机制。
|
28天前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
43 3
|
2月前
|
存储 JavaScript 前端开发
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
141 2
|
2月前
|
存储
让星星⭐月亮告诉你,HashMap的put方法源码解析及其中两种会触发扩容的场景(足够详尽,有问题欢迎指正~)
`HashMap`的`put`方法通过调用`putVal`实现,主要涉及两个场景下的扩容操作:1. 初始化时,链表数组的初始容量设为16,阈值设为12;2. 当存储的元素个数超过阈值时,链表数组的容量和阈值均翻倍。`putVal`方法处理键值对的插入,包括链表和红黑树的转换,确保高效的数据存取。
59 5
|
2月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
120 5
|
2月前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
70 0
|
2月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
57 0
|
2月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
62 0