这篇文章主要介绍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. mac 配置homebrew

    1.终端下输入export PATH=/usr/local/bin:$PATH 2.echo $PATH 3.安装homebrew  地址:ruby -e "$(curl -fsSL htt ...

  2. jquery 根据自定义属性选择

    <div myattr="test">text</div> 使用$("div[myattr='test']")进行选择

  3. New Roads CodeForces - 746G (树,构造)

    大意:构造n结点树, 高度$i$的结点有$a_i$个, 且叶子有k个. 先确定主链, 然后贪心放其余节点. #include <iostream> #include <algorit ...

  4. MongoDB 教程(一):了解 NoSQL

    概述: MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品, ...

  5. MySQL中的文件

    查看数据目录: select @@datadir; 共享表空间: ibdata1 Redo log file:ib_logfile0, ib_logfile1 二进制日志:需要配置参数 server- ...

  6. Python3组播通信编程实现教程(发送者+接收者)

    一.说明 1.1 标准组播解释 通信分为单播.多播(即组播).广播三种方式 单播指发送者发送之后,IP数据包被路由器发往目的IP指定的唯一一台设备的通信形式,比如你现在与web服务器通信就是单播形式 ...

  7. Java Code Examples for org.codehaus.jackson.map.DeserializationConfig 配置

    The following code examples are extracted from open source projects. You can click  to vote up the e ...

  8. 使用外置的Servlet容器

    嵌入式Servlet容器: 优点:简单.便捷 缺点:默认不支持JSP.优化定制比较复杂(使用定制器[ServerProperties.自定义EmbeddedServletContainerCustom ...

  9. Win10系列:JavaScript 模板绑定

    WinJS库模板提供了一种格式化显示多条数据的便捷方式,通过这种方式可以将模板与ListView或FlipView等控件结合使用以控制数据的显示格式.定义一个WinJS库模板的方法与定义WinJS库控 ...

  10. unity鼠标滚轮控制摄像机视野的缩放和按住鼠标控制摄像机移动

    //摄像机前进后退的速率 private float view_value=20f; private float maximum = 100; private float minmum = 30; / ...