ThinkPHP中URL解析原理,以及URL路由使用教程!
几个概念:
THINKPHP 是一个MVC框架,使用PATHINFO解析出分组名,模块名,方法名,以及参数。
PATHINFO:就是 http://localhost/index.php/Home/Index/index/a/1/b/2?c=3 中的红色部分,注意,c=3并不是pathinfo的一部分,它是一个query参数。PATHINFO指的是URL中的路径实际上不存在的时候,apache或nginx等通过一定的手段将这个不存在路径保存到环境变量 $_SERVER['PATH_INFO']中,也可以将它转化为$_GET['s']参数,TP也可以识别。
也就是说当你访问THINKPHP项目的时候,你实际上访问的只是入口文件index.php ,不管你后面有多长的路径,都是实际不存在的,转化成PATHINFO或$_GET['s']了而已。
那么THINKPHP就是根据PATHINFO,从中提取出 分组名,模块名,方法名,以及将剩余的部分转化为$_GET变量,比如TP从PATHINFO字符串中提取'Home'字符串,将其保存到$_GET['g'] ,$_GET['m']='Index' ;$_GET['a']='index' ;$_GET['a']=1 ;$_GET['b']=2。不信你可以随便在某个模块方法下 dump('$_GET')看看。
之后Tp就是根据$_GET['g'],$_GET['m'],$_GET['a']来加载实例化对应分组下的模块类,并执行对应的方法。
关于URL详细的解析流程,请看 ThinkPHP/Lib/Core/Dispatcher.class.php 核心类。
URL路由:
URL路由--Url Router,指的是,在TP进行常规url解析之前,先检测路由,如果发现有路由规则匹配当前的PATHINFO,那么URL解析则交给路由处理。
路由规则是由多条 rule=>router 规则组成的数组。
路由处理过程大概如下:
1.遍历路由规则rule,与当前PATHINFO字符串进行匹配,如果合法,则从PATHINFO中取出所需要的字符串。
2.路由中每条规则对应一个router,router中指定对应的模块以及方法,模块和方法可以用第1步中匹配到的字符串进行动态替代。
3.将剩余的参数都解析并写入到$_GET中。
路由规则:
list/2/p/1 ,我们需要访问id为1分类列表页,并且p是页码,第一页。
list/2/p/1
\d/p/:p
\d'=>'Home/list/index'
del/10 。要调用article模块下的del方法,并将10作为id传递给它
:1'
add/10中的add,规则只需要稍加改动,如下:
:1'
|拼接,比如 ^add|del|get
:1?p=1'
完整匹配整个PATHINFO,只需要在rule的结尾加上
$,比如
正则路由可以帮助你 。
最新文章
- Css-自适应高度修复(高度随内容而自动撑高)
- 20145212 《Java程序设计》第8周学习总结
- ADO.NET 基础
- iOS开发之网络编程--6、NSURLSessionConfiguration笔记
- MakeObjectInstance的简单理解
- 实时监控MySql状态
- 【转】MySql数据库--mysql_real_escape_string()函数
- ORACLE-修改当前会话的语言环境
- C# byte[]与char[]、string与char[]、byte[] 与 string 互转
- 采购件不允许挂BOM
- java序列化对象 插入、查询、更新到数据库
- 使用JAVASCRIPT实现静态物体、静态方法和静态属性
- 6.26学习 异步委托回调函数 VS 多线程 VS 并行处理
- 转- 在ubuntu下安装Nginx
- Hystrix源码解析
- Windows中的备份和还原
- python 前面几个单词含义
- MVC5 Api Area 区域
- SQL Server 查询性能优化——创建索引原则(一)
- zuul超时及重试配置
热门文章
- xcopy 复制了0个文件
- git clone 出错SSL certificate problem, verify that the CA cert is OK.
- Spring事务Transaction配置的五种注入方式详解
- C语言中指针数组和数组指针的区别
- 谈数据库索引和Sqlite中索引的使用
- C++ volatile的作用
- poj 3009 Curling 2.0( dfs )
- The only legal comparisons are between two numbers, two strings, or two dates.
- (六)学习MVC之标签a提交页面
- 问题与解答 [Questions &; Answers]