CodeIgniter 是一个小巧但功能强大的 PHP 框架,当前下载包2.6M,作为一个简单而“优雅”的工具包,适合开发者们建立功能完善的 Web 应用程序。
官方地址【CI 3.1.5】: https://codeigniter.org.cn/
CI 4.x 版本地址:https://codeigniter-chinese.github.io/codeigniter4-user-guide/index.html
1 CI应用程序流程图
下图说明了整个系统的数据流程:
CodeIgniter 程序流程
- index.php 文件作为前端控制器,初始化运行 CodeIgniter 所需的基本资源;
- Router 检查 HTTP 请求,以确定如何处理该请求;
- 如果存在缓存文件,将直接输出到浏览器,不用走下面正常的系统流程;
- 在加载应用程序控制器之前,对 HTTP 请求以及任何用户提交的数据进行安全检查;
- 控制器加载模型、核心类库、辅助函数以及其他所有处理请求所需的资源;
- 最后一步,渲染视图并发送至浏览器,如果开启了缓存,视图被会先缓存起来用于 后续的请求。
2 CI框架源码架构
主要有三个目录
1 > application目录:用于开发者编写相应的配置以及逻辑处理,开发者只需在这个目录下添加自己需要的开发文件。
2 > system目录:框架的系统库,里面包括核心库,类库,辅助类库,数据库等。
3 > user_guide:用户手册。
image.png
3 CI框架运行流程
ci2.png
- 1 入口文件index.php, 定义环境常量
ENVIRONMENT
,路径常量BASEPATH
,APPPATH
,VIEWPATH
,引入核心库system/core
下的CodeIgniter.php
文件 - 2 初始化核心库
system/core
里的类库,引用配置文件,错误处理,钩子函数
{
benchmark: "Benchmark",
hooks: "Hooks",
config: "Config",
log: "Log",
utf8: "Utf8",
uri: "URI",
router: "Router",
output: "Output",
security: "Security",
input: "Input",
lang: "Lang",
loader: "Loader"
}
3 钩子函数五个:
pre_system
在系统执行的早期调用,这个时候只有 基准测试类 和 钩子类 被加载了, 还没有执行到路由或其他的流程。
pre_controller
在你的控制器调用之前执行,所有的基础类都已加载,路由和安全检查也已经完成。
post_controller_constructor
在你的控制器实例化之后立即执行,控制器的任何方法都还尚未调用。
post_controller
在你的控制器完全运行结束时执行。
post_system
在最终的页面发送到浏览器之后、在系统的最后期被调用。4 实例化
CI_Controller
类
function &get_instance()
{
return CI_Controller::get_instance();
}
路由类Router
解析url
获取请求的 controller
控制器、method
方法 以及参数,加载application/config
配置文件中 相应的 librays 类库
、 helper辅助函数
及 DB 库
,也可添加model类
,执行方法,渲染html页面
- 5 加载CI 类库
system/libraries/
和自定义类库application/libraries
$this->load->library('class_name');
$this->load->library('form_validation'); //加载 表单验证类库
类库参考
- 基准测试类
- 缓存驱动器
- 日历类
- 购物车类
- 配置类
- Email 类
- 加密类
- 加密类(新版)
- 文件上传类
- 表单验证类
- FTP 类
- 图像处理类
- 输入类
- Javascript 类
- 语言类
- 加载器类
- 迁移类
- 输出类
- 分页类
- 模板解析类
- 安全类
- Session 类
- HTML 表格类
- 引用通告类
- 排版类
- 单元测试类
- URI 类
- 用户代理类
- XML-RPC 与 XML-RPC 服务器类
- Zip 编码类
- 6 加载系统辅助函数
system/helpers
和自定义辅助函数appliation/helpers
$this->load->helper('name');
$this->load->helper('url'); //加载 URL 辅助函数 ,它的文件名为 url_helper.php
$this->load->helper(
['helper1', 'helper2', 'helper3']
); //加载多个辅助函数