这篇文章主要介绍CI核心框架工具类CI_URI。

该类主要用来解析uri和决定路由的。关于URI和URL的关系请参考这位朋友的文章。简单来说URI是唯一定位的资源,URL是唯一资源的一个网络可能访问路径。所以从这个角度来看,作者在定义类名的时候还是非常严谨的,因为由于解析路由的存在,同一个资源可能有多个访问路径。

1.__construct()

该构造函数,主要针对enable_query_strings=true的情况作出一些处理。

举例说明:

1)当值为true时候,URL为:http://example.com?a=me&b=something&c=here

2)当值false的时候,URL为:http://example.com/me/something/here

因为在大多数情况下,我们会把enable_query_strings设为false。

在构造函数中,就是针对设为false的时候,针对'REQUEST_URI'和‘QUERY_STRING‘ 两种protocol(规则) 分别处理uri。

2._parse_request_uri()

当protocol参数的值是‘REQUEST_URI‘时候,采用该函数解析uri。

一系列的操作,清理并得出不含‘/’相对路径,例如:http://47.100.9.155/skin/index/start?a=1 返回的uri 是 index/start。

两一个操作是清理和设置$_SERVER['QUERY_STRING']的值,并且把相应的参数存入$_GET数组中。

3._parse_query_string()

当protocol参数的值是‘QUERY_STRING‘时候,采用该函数解析uri。

这个函数与_parse_request_uri的区别是采用$_SERVER['QUERY_STRING']的值来获取uri,并且返回。到底采用_parse_request_uri方法或者_parse_query_string方法来获取uri是由web服务器(如apache,nginx等)的路由配置来决定的。

4._set_uri_string()

该函数是protect 属性,意味着它不能被外部直接调用,只能被内部调用或者被子类继承调用。在这里,暂时只是被构造函数调用。

该函数主要做了以下的事情:

  1)移除不可见的字符,和多余的/;

   2)如果有之前在框架中设置了文件名后缀,在这里将其移除;比如有可能是一个example文件,非要伪装成静态文件example.html,在这里会将.html去除掉;

  3)将各参数挑出来并过滤后存入segments[]数组。

剩下的一些公共函数主要是对uri的一些获取操作,可以参考官方汉化后的文档:https://codeigniter.org.cn/user_guide/libraries/uri.html。

php优秀框架codeigniter学习系列——CI_URI类学习的更多相关文章

  1. php优秀框架codeigniter学习系列——CI_Router类学习

    这篇文章主要介绍CI核心框架工具类CI_Router. 如果说CI_URI类是用来解析URI,那么CI_Router类就应该是根据解析出来的URI来决定究竟访问哪一个文件和哪一个function. 详 ...

  2. php优秀框架codeigniter学习系列——CI_Security类学习

    这篇文章主要介绍CI核心框架工具类CI_Security. 安全类包含了一些方法,用于安全的处理输入数据,帮助你创建一个安全的应用.以下选取类中的重点方法进行说明. __construct() 在构造 ...

  3. php优秀框架codeigniter学习系列——CI_Lang类学习

    这篇文章主要介绍CI核心框架工具类CI_Lang. 根据CI文档自己的定义,该类用来: 提供相关的函数,用于检索语言文件和文本行,以便国际化. 以下选取类中的重点方法进行说明. __construct ...

  4. php优秀框架codeigniter学习系列——CI_Input类学习

    这篇文章主要介绍CI核心框架工具类CI_Input. 根据CI文档自己的定义,该类用来: 提前处理全局变量,以保证安全; 提供一些帮助函数用来处理输入数据. 以下选取类中的重点方法进行说明. __co ...

  5. php优秀框架codeigniter学习系列——CodeIgniter.php概览

    CodeIgniter.php是CI框架的核心文件.它在前端控制器index.php之后运行,加载各类基础组件,执行请求.文件执行完成后,这次请求也就结束了.所以,该文只能对CodeIgniter.p ...

  6. php优秀框架codeigniter学习系列——CI_Output类的学习

    这篇文章主要介绍CI核心框架工具类CI_Output. 根据CI文档自己的定义,这个类主要就是生成返回的页面给浏览器.以下选取类中的重点方法进行说明. __construct() 在构造函数中,主要确 ...

  7. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  8. 【深度学习系列】迁移学习Transfer Learning

    在前面的文章中,我们通常是拿到一个任务,譬如图像分类.识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性.时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型, ...

  9. php优秀框架codeigniter学习系列——CI_Loader类分析

    这是一个加载视图和文件的类. __construct() 设置视图文件的路径,和获取输出缓冲级别. initialize() 该方法只会被CI_Controller调用一次,会调用 $this-> ...

随机推荐

  1. LOJ6036编码

    每个串拆成两个,都插入trie数. 把trie树建出来后,每一条从根到叶子的链上最多只能有一个变量为1. 这是个经典的前后缀优化2-sat建图的套路. 树上的做法也就是边dfs边做而已. #inclu ...

  2. MySQL安装脚本最佳实践

    MySQL安装脚本最佳实践 2018年9月19日 17:01 #!/bin/bash   export host_ip=192.168.7.206   echo '#1.取master主机ip的后三位 ...

  3. docker实战系列之快速删除docker中的容器

    1.停用全部运行中的容器 docker stop $(docker ps -q) 2.删除全部容器 docker rm $(docker ps -aq) 3.停用并删除容器 docker stop $ ...

  4. [转载]Python使用@property装饰器--getter和setter方法变成属性

    原贴:为什么Python不需要getter和setter getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和sette ...

  5. NOSQL -- Mongodb的简单操作与使用(wins)

    NOSQL -- Mongodb的简单操作与使用(wins) 启动mongodb: 1.首先启动服务 dos命令下:net start Mongndb 也可以查询服务,手动开启服务: 完成后: 2.启 ...

  6. ActiveMQ queue 分页

    分页:即获取部分数据,queue按页从message cursor读取消息,然后分发给consumer. 页大小: public abstract class BaseDestination impl ...

  7. PyCharm调试运行Scrapy教程

    一.使用scrapy创建一个项目 这里使用scrapy官方第一个示例 scrapy startproject tutorial 使用PyCharm打开项目,在tutorial/tutorial/spi ...

  8. AI新建文件可以新建多个画板5.2

  9. jquery ready&&load用法

    ready和load那一个先执行 DOM文档加载的步骤 (1) 解析HTML结构 (2) 加载外部脚本和样式表文件 (3) 解析并执行脚本代码 (4) 构造HTML DOM模型 //ready (5) ...

  10. bzoj1239

    题解: 首先计算出两两之间的距离 然后二分答案 然后贪心判断是否可以放置少于等于k个 代码: #include<bits/stdc++.h> using namespace std; ; ...