ci框架
CodeIgniter是一个小巧但功能强大的PHP框架,当前下载包2.6M,作为一个简单而“优雅”的工具包,适合开发者们建立功能完善的Web应用程序。
官方地址【CI3.1.5】:https://codeigniter.org.cn/
CI4.x版本地址:https://codeigniter-chinese.github.io/codeigniter4-user-guide/index.html
1CI应用程序流程图
下图说明了整个系统的数据流程:
CodeIgniter程序流程1.index.php文件作为前端控制器,初始化运行CodeIgniter所需的基本资源;
2.Router检查HTTP请求,以确定如何处理该请求;
3.如果存在缓存文件,将直接输出到浏览器,不用走下面正常的系统流程;
4.在加载应用程序控制器之前,对HTTP请求以及任何用户提交的数据进行安全检查;
5.控制器加载模型、核心类库、辅助函数以及其他所有处理请求所需的资源;
6.最后一步,渲染视图并发送至浏览器,如果开启了缓存,视图被会先缓存起来用于后续的请求。
2CI框架源码架构
image.png主要有三个目录
1>application目录:用于开发者编写相应的配置以及逻辑处理,开发者只需在这个目录下添加自己需要的开发文件。
2>system目录:框架的系统库,里面包括核心库,类库,辅助类库,数据库等。
3>user_guide:用户手册。
3CI框架运行流程
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()
{
returnCI_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']
);//加载多个辅助函数
辅助函数参考
*数组辅助函数
*验证码辅助函数
*Cookie辅助函数
*日期辅助函数
*目录辅助函数
*下载辅助函数
*邮件辅助函数
*文件辅助函数
*表单辅助函数
*HTML辅助函数
*Inflector辅助函数
*语言辅助函数
*数字辅助函数
*路径辅助函数
*安全辅助函数
*表情辅助函数
*字符串辅助函数
*文本辅助函数
*排版辅助函数
*URL辅助函数
*XML辅助函数