路由是项目开发中比较重要的一个环节,每个项目都会使用路由进行管理接口,接下来本文会从源码方面带大家一起学习路由。 同样代码先从这里开始,但是这次的关注点是在路由参数和变量规则上。 这俩个点只是简单的给大家说明一下使用和简单的执行流程。 比较深的理解就不去说明了, 因为这俩个点在平时开发过程中是不怎么使用的。 在上文中还记得在文件 并且文档中也给了很多支持的参数,如下图。 那这个路由参数是怎么使用的呢! 接着使用之前我们使用的路由,并且给设置上URL后缀检测,支持匹配多个后缀。 那么我们设置的这个路由应该怎么访问呢! 如果按照正常的路由规则进行访问是会报错的,正确的访问方式请继续看。 正确的请求地址应该为 这块的具体执行流程使用代码追踪器简单的看一下即可,咔咔这里就不做演示了。 对于路由参数咔咔这里在给大家演示一个案例,就基本结束了。 全局路由参数 路由参数这块最后一个说明的就是全局路由参数。 直接来到文档就可以看到。 这里咔咔设置俩个路由规则做测试,一个参数可选,一个必选,并且设置上路由规则添加文件后缀。 传参数时的请求地址。 不传参数的请求地址。 以上就是针对路由参数写的内容。 没有去做特别深的讲解,基本就是说明了怎么使用,有这个东西的存在,所以了解即可。 变量规则 同样的变量规则,这个在咔咔的日常开发工作中是更不可用的。 变量规则咔咔认为唯一的好处就是对参数进行过滤。 也就是说变量规则是在路由规则存在参数时才会存在的行为。 咔咔这里给大家提供一个简单的案例即可。 演示的案例 在路由后边追加参数 那么接下来看一下这个请求如何写。 当参数为数字时可以输出传入的参数。 但是当传入字母的时候就会报错。 所以说变量规则就是对路由规则后的参数进行的过滤,也就是使用正则进行处理的。 截止到这里关于路由参数和变量规则就简单的说到这里了。 虽然说内容很简单,大多数都是使用案例给大家介绍怎么使用,没有去对源码进行深究。 第一平时开发不怎么会去使用。 第二在后文中还需要进一步深入了解,这里只是做一个认识。 其实说到这里估计还是有很多人不明白,为什么输入路由地址就可以出现对内的内容,这个后期会进行深入的了解。 资源路由的设置也是很简单。 同时使用命令行来创建文件也更是方便。 创建的控制器本身就是一个资源路由文件。 接着还是会执行到Route文件的resource方法。 这个方法同样会有路由规则、路由地址、路由参数、变量规则。 接着就会来到 在这个类中及时做一些简单的属性赋值。 再就是咔咔圈出来的地方,接下来咔咔会对圈出来的地方进行说明。 由于resource类继承这RuleGroup类,所以会跳转到thinkphp/library/think/route/RuleGroup.php类里。 来到这个方法执行的动作。 然后在就返回上层看接下来的东西。 设置分组的路由规则处理完之后就是对一些属性进行赋值,主要为一下三个。 属性赋值就没有什么说的了,就是需要明白对应的属性做的事情即可。 在紧接着就是会以请求方式为键值 以$this为值 返回本类实例,并且会进行检测此路由方法是否为注解路由。 返回的结果咔咔打印出来给大家简单的看一下,内容没有截取全,知道这个值是什么就行了。 以上执行完之后就会返回上层去执行lazy方法 首先知道这个传入的这个参数是什么:路由是否延迟解析 接着就会来到lazy方法 在这个方法中会去调用parseGroupRule,并且传入的参数就是分组的路由规则 这块的内容就是关于路由分组的,这里就不走探讨了。 直到这里关于资源路由就简单说到这里 最后咔咔将执行脑图给大家画出来 其实在上节中存在一行这样的代码 这行代码根据方法名字都知道是获取请求域名的 但是都知道这个域名是在哪里进行设置的吗? 当你请求这个资源路由时,就会执行到Route类的构造函数 在构造函数里边有这样一行代码,就是来获取请求域名的 就会来到host方法 在host方法中,这个参数为true 这里只需要关注 在咔咔圈出来的第二处可以看到,第一个条件是成立的,但是第二个条件是不成立的 所以会直接返回上一步获取出来的 打印 紧接着就会执行初始化默认域名这个方法 也就是在这里对域名进行了初始化 此时还会有疑问就是明明是在 设置域名地址是在 关于这个一想就能明白是因为继承关系的啦! 那么到这里对于这个域名的设置应该就很清楚了,如果还不明白就多看看咔咔写的文章哈! 咔咔写一篇文章估计需要几个小时,但是你们看也就几分钟,几分钟能看个啥啊! 对着代码慢慢,要的是质量,不是效率哈! 那么截止到这里关于域名是在什么时候设置的就讲解完了,接下来会对路由配置-数组方式配置解读 其实这里估计很多人看了后都会有点懵。 大多数都是不理解,这是什么意思,这玩意在哪! 其实这个配置是在5.1之后才有的,咔咔翻过之前的版本是不存在这个配置的。 这个配置的位置其实就是咱们一直学习的Route路由里边,没想到吧!就是这么强大。 就是路由配置里边的那个return。 在回顾一下路由文件的加载吧! 首先是入口文件,这个是毫无疑问的。 咔咔圈起来的地方会返回App的这个实例,如果有不明白的可以去看容器那一篇文章。 所以这行代码会执行到App类的run方法。 那么来到 能直接看到的就是初始化应用。 来到初始化应用就可以看到关于路由初始化 来到routeInit方法 在导入路由配置时是对其有过一次判断,这里的判断就是针对的路由配置文件中的数组方式配置。 到这里关于路由配置什么时候加载的应该就有一定的了解了。 但是关于数组方式配置路由在文档中是没有提到的,也就是说并没有使用案例。 所以我们就需要在根据 直接找到使用方法即可。 这里关于 其实也就是 首先我们需要先知道的就是App类是继承这Container类的 然后在Container类的最后存在几个魔术方法。 当App中调用不存在的Route类时就会执行这个__get这个魔术方法。 然后就会执行__get魔术方法中的make方法。 关于这个方法,咔咔说过了不下三次了,可以去看容器那一篇文章哈! 接着继续我们的行军之路,来到 在这个方法中可以看到几个熟悉的变量规则 那么使用这几个值进行简答的测试一下 刚好在第二节中对资源路由进行了说明,那么接下来就使用检查资源路由为条件进行测试 一定要把之前设置的资源路由配置给关闭,否则是无法进行测试的 这个时候进行一次访问 没错,就是这样,使用起来就是如此的简单 其实数组方法配置路由就跟资源路由是一样的,只不过是执行的顺序而已 最终也是通过循环将路由规则传递给resource方法 同样也是执行的这个方法 本节就简单的聊到这里,主要就是对路由初始化需要有一定的理解 并且学会使用路由数组方式的配置 这种方式不论是在之前的版本还是5.1还是发布的6.0版本都是不经常使用的,也可以说是根本不会用到的 这里提到只是为了给大家在温习一下路由初始化的过程,和知道数组配置路由到底是干什么的 哪里有疑问就要解决哪里,而不是放着不去解决
“
一、路由参数和变量规则
thinkphp/library/think/route/RuleItem.php中我们看到过关于路由参数的使用吧!http://www.source.com/index.php/hello/1.html,也就是在请求地址上需要拼接我们设置的后缀html。pattern
二、资源路由
thinkphp/library/think/route/Resource.php类
blog/<name> 或者 blog/<name></name></name>object(think\route\Domain),需要需要路由文章的第一篇第三节,并且在这一步就会对fullName进行赋值。
三、关于域名是什么时候设置的
$this->parent->getDomain()$this->server('HTTP_HOST')即可,就是用来获取域名地址的$this->host$this->host,这里为什么会执行俩次就不对此解释了,有疑问的可以使用函数debug_backtrace来进行查看。thinkphp/library/think/route/Resource.php这个类里边执行的啊!thinkphp/library/think/Route.php这个类里边的啊!
四、路由配置-数组方式配置解读
thinkphp/library/think/App.php这个类的run方法看一下。import这个方法进行追踪。$this->route->import($rules);这行代码,咔咔在做一次解释。$this->route为什么可以执行到Route类。thinkphp/library/think/Route.php的导入配置文件的路由规则,方法import
0
0
相关文章
thinkphp如何配置伪静态隐藏index.php
thinkphp数据库迁移和数据填充怎么用
thinkphp查询作用域(scope)如何简化查询
thinkphp session无法保存或跨控制器失效怎么办
thinkphp如何防止SQL注入和XSS攻击
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
384
2024.04.10
thinkphp 是一款高性能的 php 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
356
2024.04.10
Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
175
2023.12.20
硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。
1800
2023.10.19
PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
2341
2025.12.29
http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
486
2023.11.09
本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。
33
2026.03.04
热门下载
相关下载
精品课程
共12课时 | 0.7万人学习
共18课时 | 1.3万人学习
共11课时 | 0.7万人学习















































