PHP开发框架CI——学习小记
之前做后端开发的时候,因为都是很小的功能或项目,所以基本都是手写原生php。不过这样的开发效率在面对稍大一些的项目的时候是比较低的。因此花时间学习一下php相关框架CI的使用。
MVC架构
在学习CI框架之前,先了解了一下MVC。它是一种设计典范,CI框架也是基于此的。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
以上是摘自百度的介绍。简单地说就是把一个项目的代码分离成三个部分来实现,逻辑清晰,便于维护。
下面逐一谈一下对那三个部分的理解:
- View(视图)这是上层,是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。它是提供给用户的操作界面,是程序的外壳。也就是面向用户的东西。
- Controller(控制器):这是中间层,它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。也就是负责与用户交互。
- Model(模型):这是下层,是应用程序中用于处理应用程序数据逻辑的部分,也就是程序需要操作的数据或信息。通常模型对象负责在数据库中存取数据。
这样子划分来组织代码,就会显得项目逻辑很清晰了,也方便维护。
CodeIgniter框架
了解了MVC的概念,现在进入正题。学习CodeIgniter框架(简称CI)。对CI框架的学习参考了浅析CI框架、CI官方手册等资料。
框架的流程

这是网上找的图,比较清晰地展现了流程:
- index.php 文件作为前端控制器,初始化运行 CodeIgniter 所需的基本资源;
- Router 检查 HTTP 请求,以确定如何处理该请求;
- 如果存在缓存文件,将直接输出到浏览器,不用走下面正常的系统流程;
- 在加载应用程序控制器之前,对 HTTP 请求以及任何用户提交的数据进行安全检查;
- 控制器加载模型、核心类库、辅助函数以及其他所有处理请求所需的资源;
- 渲染视图并发送至浏览器,如果开启了缓存,视图被会先缓存起来用于后续的请求。
框架目录结构

- application目录:用于开发者编写相应的配置以及逻辑处理,开发者只需在这个目录下添加自己需要的开发文件。
- system目录:框架的系统库,里面包括核心库,类库,辅助类库,数据库等,这些文件,开发者最好不要擅自修改。
- user_guide:用户手册。
重要组成
控制器
开发者在 application/controller 目录下添加自己的controller 控制器,但是每个控制器都要继承核心库里的基类 CI_Controller,它已获取到整个框架的核心类库对象,通过它基本可以调用CI框架下的核心方法。
模型
模型就是专门用来和数据库打交道的 PHP 类,开发者在 application/models 目录下定义自己的模型类,都要继承 模型基类 CI_Mode。当你在控制下调用模型,只需要下面一行代码就实例化了:
$this->load->model('model_name');
官方的对模型介绍更专业
视图
简单来说,一个视图其实就是一个 Web 页面,或者页面的一部分,像页头、页脚、侧边栏等。需要在控制器里加载,像这样$this->load->view('name');,name为视图文件名,如果是php后缀可省略,详见官方手册
辅助函数
辅助函数是帮助我们实现特定功能的函数,如验证码辅助函数,Cookie辅助函数,可以大大提高开发效率,简化编程,具体使用方法可以参照官方手册辅助函数以及查看辅助函数目录
CI类库
相比于辅助函数,CI类库提供了用于实现完整大功能的类,使用方法可参考官方手册以及查看类库目录.
数据库
CI框架封装了多种数据库驱动与连接方法,让我们轻松配置就能连接上,且封装了一些查询构造器与生成查询结果,让代码看起来方便简洁。需要在application/config/database.php 文件下配置链接的参数。具体看手册啦。
总结
框架为开发提供了很多便利好用的工具,也使代码看起来更简洁,逻辑清晰。不过要想熟练使用,还是要在实际开发中多使用。上述的CI框架具有轻便易上手的特点,因此它比较适合中小型的项目使用,不适合写太复杂的业务逻辑。
框架的使用还是有许多细节要注意的,想要一下子全部摸清不太可能,建议在开发中根据需要去具体学习,多看官方手册。
PHP开发框架CI——学习小记的更多相关文章
- mongodb入门学习小记
Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...
- javascript学习小记(一)
大四了,课少了许多,突然之间就不知道学什么啦.整天在宿舍混着日子,很想学习就是感觉没有一点头绪,昨天看了电影激战.这种纠结的情绪让我都有点喘不上气啦!一点要找点事情干了,所以决定找个东西开始学习.那就 ...
- js 正则学习小记之匹配字符串
原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...
- js 正则学习小记之左最长规则
原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'.其实我们的本意是想得到整 ...
- js 正则学习小记之NFA引擎
原文:js 正则学习小记之NFA引擎 之前一直认为自己正则还不错,在看 次碳酸钴,Barret Lee 等大神都把正则玩的出神入化后发现我只是个战五渣. 求抱大腿,求大神调教. 之前大致有个印象,正 ...
- js 正则学习小记之匹配字符串优化篇
原文:js 正则学习小记之匹配字符串优化篇 昨天在<js 正则学习小记之匹配字符串>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯 ...
- CSS学习小记
搜狗主页页面CSS学习小记 1.边框的处理 要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言 ...
- Gcd&Exgcd算法学习小记
Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...
- logstash 学习小记
logstash 学习小记 标签(空格分隔): 日志收集 Introduce Logstash is a tool for managing events and logs. You can use ...
随机推荐
- 华为精益敏捷专家:DevOps转型中的那些坑
陈军--原腾讯高级项目经理.华为精益敏捷专家 DevOps是现在非常流行的一个词,很多人都在提DevOps,在往那个方向去转,但转的时候坑特别多. 现实是很理想的,大家都觉得做了DevOps之后就会非 ...
- .Net C# RSA签名和验签重写
namespace com._80community.unittest.CUP { /// <summary> /// CUP Client /// </summary> pu ...
- 使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据
一. 使用RSA证书加.解密敏感数据 X.509证书标准支持三种不对称加密算法:RSA, DSA, Diffie-Hellman algorithms.最常用的是RSA算法.所以本文就以前面章节使用 ...
- vue 父子组件数据的双向绑定大法
官方文档说明 所有的 prop 都使得其父子 prop 之间形成了一个 单向下行绑定 父级 prop 的更新会向下流动到子组件中,但是反过来则不行 2.3.0+ 新增 .sync 修饰符 以 upda ...
- 微信小程序修改radio和checkbox的默认样式和图标
wxml: <view class="body"> <view class="body-content"> 第1题:企业的价值观是 ? ...
- 【opencv源码解析】 三、resize
resize.cpp void cv::resize( InputArray _src, OutputArray _dst, Size dsize, double inv_scale_x, doubl ...
- linux文件目录详细介绍
linux文件目录 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点 ...
- npm install 报错踩坑路
先出现的是超过最大调用栈问题: npm ERR! Maximum call stack size exceeded 百度之后说给npm降级或者升级 降级 : npm install -g npm@5. ...
- static{}静态代码块与{}普通代码块之间的区别
先看一个例子: //class A package com.my.test; class A { static { System.out.println("A1:父类静态代码区域" ...
- CHD-5.3.6集群上hive安装
解压过后: [hadoop@master CDH5.3.6]$ ls -rlttotal 8drwxr-xr-x. 17 hadoop hadoop 4096 Jun 2 16:07 hadoop- ...