CodeIgniter框架——知识要点汇总
NO1、学习要点:
一、CodeIgniter 框架的简介
二、CodeIgniter 框架的安装
三、CodeIgniter 框架的目录结构分析
四、CodeIgniter 框架是如何工作的?
五、CodeIgniter 框架中的控制器、视图、模型及数据库操作
六、CodeIgniter 框架中辅助函数、类库、适配器的学习
七、……
注:
CI官方用户指南手册:http://codeigniter.org.cn/user_guide/toc.html
PHP点点通CI源码分析:http://www.phpddt.com/tag/codeIgniter/
CI的一些优秀实践:http://www.nowamagic.net/librarys/veda/detail/2679
NO2、
一、CodeIgniter 是什么?
1、CodeIgniter 是一个应用程序框架
CodeIgniter 是一个为用 PHP 编写网络应用程序的人员提供的工具包。它的目标是实现让你比从零开始编写代码更快速地开发项目,为此,CI 提供了一套丰富的类库来满足通常的任务需求,并且提供了一个简单的接口和逻辑结构来调用这些库。CodeIgniter 可以将需要完成的任务代码量最小化,这样你就可以把更多的精力放到项目的开发上了。
2、CodeIgniter 是免费的
CodeIgniter 是经过 Apache/BSD-style 开源许可授权的,只要你愿意就可以使用它。
3、CodeIgniter 是轻量级的
我们的核心系统只需要一些非常小的库,这与那些需要更多资源的框架完全相反。额外的库文件只在请求的时候加载,依需求而定,所以核心系统是非常快而且轻的。
4、CodeIgniter 是快速的
5、CodeIgniter 使用MVC模型
CodeIgniter 使用了模型(Model)- 视图(View)- 控制(Controllers)的方法,这样可以更好地使表现层和逻辑层分离。这对项目的模板设计者来说是非常有用的,它最小化了模板中的程序代码量。
6、CodeIgniter 生成干净的URL
CodeIgniter 生成的 URL 非常干净而且是对搜索引擎友好化的。不同于标准的“字符串查询”方法,CodeIgniter使用了 基于段 的方法:
example.com/news/article/121
注意:index.php 文件是被默认包含在 URL 中的,但是可以通过更改 .htaccess 文件来改变这个设置。
7、CodeIgniter 功能强大
CodeIgniter 拥有全范围的类库,可以完成大多数通常需要的网络开发任务,包括:读取数据库、发送电子邮件、数据确认、保存 session 、对图片的操作,以及支持 XML-RPC 数据传输。
8、CodeIgniter 是可扩展的
这个系统可以非常简单的通过自定义类库、辅助函数来进行扩展,或者也可以通过扩展类、系统钩子来实现。
9、CodeIgniter 不需要模板引擎
10、CodeIgniter 已彻底文档化
11、CodeIgniter 拥有一个良好的用户社区
注:
(一)业务流程——应用程序流程图(数据流如何贯穿整个系统)
(1)index.php 作为前端控制器,初始化运行 CodeIgniter 所需要的基本资源。
(2)Router 检查 HTTP 请求,以确定谁来处理请求。
(3)如果缓存(Cache)文件存在,它将绕过通常的系统执行顺序,被直接发送给浏览器。
(4)安全(Security)。应用程序控制器(Application Controller)装载之前,HTTP 请求和任何用户提交的数据将被过滤。
(5)控制器(Controller)装载模型、核心库、辅助函数,以及任何处理特定请求所需的其它资源。
(6)最终视图(View)渲染发送到 Web 浏览器中的内容。如果开启缓存(Caching),视图首先被缓存,所以将可用于以后的请求。
二、CodeIgniter 的安装
1、下载CodeIgniter
官方网站:http://ellislab.com/codeigniter
CodeIgniter中国:http://codeigniter.org.cn/
2、安装CodeIgniter
CodeIgniter 安装分为四个步骤: (1)解压缩安装包。
(2)把 CodeIgniter 文件夹和里面的文件上传到你的服务器。通常 index.php 在根目录。
(3)用任何文本编辑器打开 application/config/config.php 去设置你的网站根 URL。如果你打算使用加密或 Session,请设置你的加密密钥。
(4)如果你打算使用数据库,用任何文本编辑器打开 application/config/database.php 去设置你的数据库参数。
3、检测是否安装成功
(1)运行localhost/index.php
(2)运行成功的话看到如下:
三、CodeIgniter 框架中的目录结构分析
CodeInigter,一个轻量,功能全面的PHP框架,使开发者可以轻易的使用MVC的结构来开发web应用。下载一份CodeInigter(CodeIgniter V 2.2.0 (最新版本)),我们可以看到根目录下有5个文件夹/文件,其中user_guide文件夹里为说明文档,license.txt为许可协议,index.php为主入口文件,system文件夹为框架程序目录,applicant文件夹为项目目录。
|-----system 框架程序目录
|-----core 框架的核心程序
|-----CodeIgniter.php 引导性文件
|-----Common.php 加载基类库的公共函数
|-----Controller.php 基控制器类文件:CI_Controller
|-----Model.php 基模型类文件:CI_Model
|-----Config.php 配置类文件:CI_Config
|-----Input.php 输入类文件:CI_Input
|-----Output.php 输出类文件:CI_Output
|-----URL.php URL类文件:CI_URl
|-----Router.php 路由类文件:CI_Router
|-----Loader.php 加载类文件:CI_Loader
|-----helpers 辅助函数
|-----url_helper.php url相关的辅助函数,如:创建url的辅助函数
|-----captcha_helper.php创建图形验证码的辅助函数
|-----libraries 通用类库
|-----Pagination.php 通用分页类库
|-----Upload.php 通用文件上传类库
|-----Image_lib.php 通用图像处理类库
|-----Session.php 通用session类库
|-----language 语言包
|-----database 数据库操作相关的程序
|-----DB_active_rec.php 快捷操作类文件(ActiveRecord)
|-----fonts 字库 |-----application 项目目录
|-----core 项目的核心程序
|-----helpers 项目的辅助函数
|-----libraries 通用类库
|-----language 语言包
|-----config 项目相关的配置
|-----config.php 项目相关的配置文件
|-----database.php 数据库相关的配置文件
|-----autoload.php 设置自动加载类库的配置文件
|-----constants.php 常量配置文件
|-----routes.php 路由配置文件
|-----controllers 控制器目录
|-----welcome.php 控制器文件,继承CI_Controller
|-----models 模型目录
|-----welcome_model.php 模型文件,继承CI_Model
|-----views 视图目录
|-----welcome.php 视图模板文件,默认后缀名为.php
|-----cache 存放数据或模板的缓存文件
|-----errors 错误提示模板
|-----hooks 钩子,在不修改系统核心文件的基础上扩展系统功能
|-----third_party 第三方库
|-----logs 日志 |-----index.php 入口文件
四、CodeIgniter 框架是如何工作的
1、访问方式
CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表)
eg:localhost/index.php/welcome/index/id
第一段表示调用控制器类。
第二段表示调用类中的函数或方法。
第三及更多的段表示的是传递给控制器的参数,如 ID 或其它各种变量。
2、MVC设计模式
CodeIgniter 是基于模型-视图-控制器(MVC)这一设计模式的。MVC 是一种将应用程序的逻辑层和表现层进行分离的方法。在实践中,由于表现层从 PHP 脚本中分离了出来,所以它允许你的网页中只包含很少的脚本。
- 模型 (Model) 代表你的数据结构。通常来说,你的模型类将包含取出、插入、更新你的数据库资料这些功能。
- 视图 (View) 是展示给用户的信息。一个视图通常是一个网页,但是在 CodeIgniter 中,一个视图也可以是一个页面片段,如页头、页尾。它还可以是一个 RSS 页面,或任何其它类型的“页面”。
- 控制器 (Controller) 是模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。
CodeIgniter 在 MVC 使用上非常宽松,因此模型不是必需的。如果你不需要使用这种分离方式,或是发觉维护模型比你想象中的复杂很多,你可以不用理会它们而创建自己的应用程序,并最少化使用控制器和视图。CodeIgniter 也可以和你现有的脚本合并使用,或者允许自行开发此系统的核心库,可以使你以最适合你的方式工作。
3、架构目标
CodeIgniter 的目标是在最小化、最轻量级的开发包中得到最大的执行效率、功能和灵活性。为了达到这个目标,我们在开发过程的每一步都致力于基准测试、重构和简化工作,拒绝加入任何对实现目标没有帮助的东西。
从技术和架构角度看,CodeIgniter 按照下列目标创建:
- 动态实例化。在 CodeIgniter 中,组件的导入和函数的执行只有在被要求的时候才执行,而不是在全局范围。除了最小的核心资源外,不假设系统需要任何资源,因此缺省的系统非常轻量级。被 HTTP 请求所触发的事件,以及你设计的控制器和视图将决定它们什么时候被引用。
- 松耦合。耦合是指一个系统的组件之间的相关程度。越少的组件相互依赖那么这个系统的重用性和灵活性就越好。我们的目标是一个非常松耦合的系统。
- 组件专一性。专一是指组件有一个非常小的专注目标。在 CodeIgniter 里,为了达到最大的用途,每个类和它的功能都是高度自治的。
总之,CodeIgniter 是一个动态实例化,高度组件专一性的松耦合系统。它在小巧的基础上力求做到简单、灵活和高性能。
五、CodeIgniter 框架中的控制器、视图、模型及数据库操作——见用户手册 ——后续学习
1、控制器——controller
(每个 Controller 都是一个 Class, 在每个 Class 里面的 function 都是一个页面)
控制器是模型、视图以及其他任何处理 HTTP 请求所必须的资源之间的中介,并生成网页。
一个控制器就是一个类文件,用户通过URL访问某个控制器类中的方法,并由这个方法中的代码去做某些操作。
位置:项目文件夹\application\controllers
注:
类名必须以大写字母开头,并继承(extends)核心控制器类CI_Controller
默认访问方法为:index方法
方法断后按序传入方法中的形式参数
2、视图——view
(1)控制器与试图的关系
一个视图就是一个网页或者网页的一部分,如头部、尾部、侧边栏等。
控制器——调用试图:控制器根据用户访问的不同方法去调用相关的视图($this->load->view('视图文件名'))
控制器——传送数据:控制器需向视图需要展示给用户的业务数据(数据以一个数组或者对象的形式传入视图)
(2)创建视图
位置:项目文件夹\application\views
找到文件 ——> 创建文件 ——> 写代码
项目目录\views\ 文件后缀.php HTML代码
3、模型——model
模型就是一个数据库类,一个模型针对一张表,类中的方法针对功能的具体需求而做。
位置:项目文件夹\application\models
类名必须以大写字母开头,并继承(extends)数据核心类CI_Model,同时重载父类中的构造方法。
在控制器中调用模型:$this->load->model(模型名);
$this->模型名->方法名;
4、数据库操作
注:操作数据库之前,记得修改config中的database.php文件
(1)连接数据库:$this->load->database();
注:将其写在模型的构造函数里,这样就在加载模型的同时连接了数据库
(2)插入数据: $this->database->insert($t_name,$data);
$t_name:需操作的表
$data:需插入的数据(键名=字段名,键值=字段值,自增主键可不写)
(3)更新数据: $this->db->where(字段名,字段值);
$this->db->update(表名,修改值的数组);
(4)查询数据: $this->db->where(字段名,字段值);
$this->db->select(字段);
$query=$this->db->get(表名);
return $query->result();
(5)删除数据: $this->db->where(字段名,字段值);
$this->db->delete(表名);
六、CodeIgniter 框架中辅助函数、类库、适配器的学习——见用户手册 ——后续学习
1、 CodeIgniter 框架中的辅助函数
(1)位置:application/helpers 目录 或 system/helpers 目录
(2)在控制器中载入辅助函数:$this->load->helper("url"); //载入url_helper.php文件
(3)辅助函数载入机制:首先考虑载入application/helpers 目录下的文件, 再考虑载入system/helpers 目录下的文件
(4)自定义辅助函数 及 辅助函数的扩展
eg:
CI的URL辅助函数包含一组帮我们操作URL的函数。我们可以像这样装载它:
$this->load->helper('url');
然后,我们可以用它查询并返回设置在config.php文件中的site和/或base URL:
echo site_url();
echo base_url();
我们也可以用它创建超链接。我们在start控制器中访问hello函数,并把参数fred传递给该函数,这些都是通过一个URL实现的:
http://www.mysite.com/index.php/start/hello/fred
如果你想要你自己的代码创建一个这样的URL,你可以使用URL辅助函数实现。语法是:
echo anchor('start/hello/fred', 'Say hello to Fred');
这将创建一个相同URL的超链接,并显示:“Say hello to Fred”。换句话说,它等同于:
<a href="http://www.mysite.com/index.php/start/hello/fred">say hello to Fred</a>
请记住,使用CI辅助函数有两个好处。第一,输入字符较少。第二,URL辅助函数自动在config文件中查找网站URL(和index文件名)。这意味着如果你改变你的网站URL,你只需要改变config文件一次,你不需要查遍代码修改超链接。
URL辅助函数还有其他有用的功能。比如:它能创建“mailto”超链接。
echo mailto('me@example.com', 'Click Here to Email Me');
和下面的HTML代码等效:
<a href="mailto:me@example.com">click here to email me</a>
如果你担心机器人在你的网站上搜集Email,并用它们发送垃圾邮件的话,那么用safe_mailto代替mailto。屏幕显示的内容相同,并且工作也正常。
但是如果检查你的HTML代码,现在变成了复杂的JavaScript代码,机器人也许什么也抓不到(或者无法很容易的抓到)。
<script type="text/javascript">
//<![CDATA[
var l=new Array();
l[0]='>';l[1]='a';l[2]='/';l[3]='<';l[4]='|101';l[5]='|109';
l[6]='|32';l[7]='|108';l[8]='|105';l[9]='|97';l[10]='|109';
l[11]='|101';l[12]='|32';l[13]='|111';l[14]='|116';l[15]='|32';
l[16]='|101';l[17]='|114';l[18]='|101';l[19]='|72';l[20]='|32';
l[21]='|107';l[22]='|99';l[23]='|105';l[24]='|108';l[25]='|67';
l[26]='>';l[27]='"';l[28]='|109';l[29]='|111';l[30]='|99';
l[31]='|46';l[32]='|101';l[33]='|108';l[34]='|112';l[35]='|109';
l[36]='|97';l[37]='|120';l[38]='|101';l[39]='|64';l[40]='|101';
l[41]='|109';l[42]=':';l[43]='o';l[44]='t';l[45]='l';
l[46]='i';l[47]='a';l[48]='m';l[49]='"';l[50]='=';
l[51]='f';l[52]='e';l[53]='r';l[54]='h';l[55]='';l[56]='a';l[57]='<';
for (var i = l.length-1; i >= 0; i=i-1){
if (l[i].substring(0, 1) == '|') document.write("&#"+unescape(l[i].substring(1))+";");
else document.write(unescape(l[i]));}
//]]>
</script>
你,和你的用户,不需要看到这些代码。它只是用来迷惑机器人的,以确保你的Email地址的安全。而你只需要增加四个字母和一个下划线:你用safe_mailto代替mailto,CI为你做其它所有的一切。
总结一下URL辅助函数:
1、高度的“组件专一性”。URL辅助函数只做它要做的事情,简化对应的编码工作。
2、松耦合—URL辅助函数有一个简单的接口,不依赖调用它的代码。你可以在任何CI项目中使用它。例如,大多数项目都需要很多的超链接。你可以使用这个辅助函数一遍一遍地创建它们。
如果你查看URL辅助函数代码的话(在system/application/helpers/url_helper.php),那么你将会发现它是过程式的代码—只是一组函数而不是OO类。它不装载任何其他的CI类或辅助函数。(它本身不是对象,不能这样做。)
2、CodeIgniter 框架中的通用类库
(1)位置:application/libraries 目录 或 system/libraries 目录
(2)在控制器中载入通用类库:$this->load->library("upload");//文件上传类的载入
(3)通用类库载入机制:首先考虑载入application/libraries 目录下的类库, 再考虑载入system/libraries 目录下的类库
CodeIgniter框架——知识要点汇总的更多相关文章
- CodeIgniter框架学习要点
以下内容从兄弟连的CI教学视频中摘抄: http://codeigniter.org.cn/tutorials/ ------------------------------------------- ...
- CodeIgniter框架入门教程——第一课 Hello World!
本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(七)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(七) CodeIgniter 和对象这是玩家章节.它讲述的是 CodeIgniter 的工作原理,也就是揭开CI头上'神秘的面纱'.如果 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(四)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(四) 使用 CI 简化数据库开发你学习CI 是因为你想要使编程更容易和更有生产力.这一章讲述CI的Active Record类. 如果C ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(二)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(二) 二分钟: 建立一个 CodeIgniter 网站用CI建一个网站很容易. 这一章很短,解释了用CI制作网站时发生了些什么,哪些文件 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(三)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(三) 分析网站结构既然我们已经安装 CI ,我们开始了解它如何工作.读者已经知道 CI 实现了MVC式样. 通过对目录和文件的内容进行分 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(一)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(一) 对 CodeIgniter 的介绍大多数PHPer都想写出运行状态良好的应用程序,而且希望尽可能做得简单且不费事.这篇文章是有关 ...
- RIP 知识要点
RIP知识要点: UDP:520 版本:v1(广播包更新) / v2(组播更新 224.0.0.9 ) 度量值:跳数(最多跳15跳,路由为16跳时路由不可达) =================== ...
- 总结了零基础学习Java编程语言的几个基础知识要点
很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面 初学者先弄清这 ...
随机推荐
- js 上传图片进行回显
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)
补番计划 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissi ...
- Quartz任务监听器
在Quartz框架提供了JobListener接口,可在任务执行前.任务被拒绝及任务执行完成后实现对任务的拦截,该接口的声明如下: public interface JobListener { /** ...
- [iOS]在NavigationController中的ScrollView中的子视图都会下移64个像素
情况是这种: 我有一个UINavigationController,设置为self.window的root视图, 然后有一个UIVIewController是UINavigtionController ...
- android studio 警告 synchronization on non-final field
测试代码如下: public class SyncNonFinalField { private Object object = new Object(); public void start() { ...
- C++常考面试题汇总(持续更新中)
c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...
- AIDL调用指南
近期有需求要实现两个apk之间的通信,想到用AIDL来实现,现写一个demo学习下AIDL怎样使用. 这里我要实现一个apk(client端)调用还有一个apk(server端)的方法. 先实现ser ...
- java基础入门-多线程同步浅析-以银行转账为样例
在说之前先普及一下线程是什么? 线程:说白了就是一个任务片段 进程:是一个具有独立功能的程序关于某个数据集合的一次执行活动.一个进程有一个或者多个线程 线程与进程的本质差别就是有么有数据共享空间.线程 ...
- unity, change parent and keep localPosition or worlPosition
node.parent=othernode等价于node.setParent(othernode,true),是保持世界坐标不变. node.setParent(othernode,false)则可以 ...
- delphi中检测局域网ip能够ping通模块
// 函数PingHost用于ping目标IP是否连通 // uses winsock 在uses中加入 winsock // 用法: if PingHost(edit2.Text) the ...