CI(CodeIgniter)学习第二讲
了解CI的文件结构可以帮助我们快速的对CI框架有一个整体的认识,就好像我们去了一个陌生的城市一样,对你来讲周围的一切都是陌生和未知的,要想快速的了解这座城市,你可以买一张这座城市的地图,整体的了解这座城市的方位、结构和风景等等之类的。
二、CI是如何工作的。
我们不光要对CI框架要有一个整体的认识,同时还要清楚CI是如何工作的,这样才能快速的掌握和运用CI,还拿刚才去一个陌生城市来说吧,如果你想很快的
适应和融入这座城市,是否我们有必要知道一些关于这座城市的风土人情和文化习俗呢。我想还是很有必要的吧,毕竟我们得入乡随俗呀。
当然,军哥这里只是简单的介绍一下,让大家有一个大概的思维认知。
1、CI的文件结构。
大家还记得第一讲中的CI目录结构图吗,当时并没怎么详细说明,我们再来看一下。
根据上图我们可以知道,CI主要组成部分为,application(应用文件夹)、system(系统文件夹)和index.php入口文件。
应用文件夹中主要是存放控制器、模型和视图等,系统文件夹中主要是存放组成CI的核心文件的,index.php入口文件是一个单一入口文件,所谓单一文件是指在一个网站(应用程序)中,所有的请求都是指向的这么一个文件,由它负责接收并处理URL中的控制器和方法。换句话说, 它调用一个 '控制器', 然后返回一个'视图'。
具体对单一入口文件的介绍我引用了高洛峰老师在BroPHP中对它的一个解释。如下:
单一入口文件:
在使用PHP过程化编程时,每个PHP文件都能独立访问并运行,就像一个体育场有多个入口一样,需要在每个入口都要检票和安全检查。而采用单一入口模式进
行项目部署和访问,无论完成什么功能,一个项目只有一个统一(但不一定是唯一)的入口,就像一个体育场如果只能从一个入口入场(程序是抽象的,一个入口和
多个入口效率是一样的)控制起来则更灵活,几乎没有什么缺点。使用主入口文件部署项目的优点如下:
1、加载文件方便
在编写和阅读过程化程序代码时,经常会遇到文件之间互相包含,其中包括PHP使用include包括函数库和公共资源文件,也包括在HTML中使
用<link>和<script>加载CSS和javaScript文件。项目越大,文件越多越让人感觉头疼,就像一张大网一样
将文件交织在了一起,不容易找到头绪。而使用单一入口则解决这个难题,在项目应用中用到的任何一个文件,只要相对于单一入口文件的位置查找即可。
2、权限验证容易
如果每个PHP文件都可以独立访问,在做用户权限验证时就需要对每个文件进行判断。而采用单一入口则只需要在一个位置进行判断即可。
3、URL重写简单
如果每个PHP文件和不同目录下的PHP文件都可以独立访问,则在Web服务器中对URL进行重新编写时需要很多条规则。而采用单一入口则在URL重写时只需要简单的几条规则即可。
好,接着来具体看application(应用文件夹)、system(系统文件夹)中放了哪些文件以及它们的作用是什么吧。
application :
cache 第一次安装时为空,如果你打开缓存设置,这个目录存放缓存数据
config 存放配置文件,包含网站的基本配置信息
controllers 存放你项目的控制器目录
core 该目录可以扩展系统的核心文件
errors 包含出错信息页,你不必修改这个目录
hooks 首次安装时为空,用来存放你创建的钩子。钩子是 用来装载其它文件的控制方法
helpers 辅助函数,你可以对系统的辅助函数进行扩展
language 存放你本国语言的文件目录
libraries 类库,你可以创建自己的类库
logs 如果你设置打开了系统的错误日志,日志文件就默认保存在这个目录
models 存放你项目的模型目录
views 存放视图的模板目录
system :
core 存放系统核心文件
database CI框架的数据库类的类库文件
fonts 没有在用户手册中介绍,存放水印图像使用的字体
helpers 辅助函数,你可以对系统的辅助函数进行扩展
language 存放英语的文件目录
libraries 存放一些类库的目录,比如SESSION类、分页类、图像类等
应用文件夹(application)中,最重要的文件夹是config,该文件夹内有两个需要关注的文件:config.php 和 database.php。
,其次是controllers、models和views文件夹,分别存储你网站中的控制器、模型和视图。
爱问问题的你可能会纳闷CI为什么要这样来设置文件结构,其实啊,为什么要把代码放在这个目录而不是那个目录是没有什么理由好讲,这就是CI里的一种约定。
另外细心的你是不是又发现application和system有些文件夹是相同的呢,如core、helpers、libraries等。其实这也是由
CI结构约定的, 当你装载一个辅助函数helper, 或类库文件library,
CI会在上述两个目录中查找,比如你要装载一个类叫做无限分类的类Category,
CI会先查找application/libraries目录。如果这个目录中不存在,CI会寻找system/libraries目录。这意味着可以通
过把同名的文件放入application目录来取代CI核心库的libraies,
helpers。但不要轻易尝试这样做,因为这种高度的灵活性需要你拥有足够多的CI使用经验。
2、那CI是如何工作的呢?
上一节我们快速的搭建好了一个CI网站,浏览器成功的显示出一个欢迎界面。我们不禁要问那究竟是如何显示出来的呢?其实根据我们前面对CI的介绍和结构分析之后,我们不难发现这跟CI使用M-V-C模式和单一入口文件有关。
我们来简单分析一下:
例如当我们访问的时候,程序会依靠index.php来做大量的初始化工作,调用大量的基础类库,并根据index.php后面的参数来加载控制器和方
法,然后调用模型,加载视图等内容信息。当然在这个例子当中index.php后面你并没有看到任何参数,但这不代表就没有参数存在,因为CI事先已经默
认指定好了控制器和方法的参数,这个默认的参数可以自己指定,配置文件存放在application/config/routes中,该配置文件中包含下
列设置:
$route['default_controller'] = "welcome";$route['404_override'] =
'';上述config文件,默认的控制器为welcome,如果没有指定方法,index方法会被默认指定。如果请求的控制器或方法不存在,则程序会转
到“404”页面。结果如图所示:
另外需要进一步说明的是上述URL中方法(也称为函数)必须是前面那个控制器中存在的。或则说,你不能够在一个控制器内调用其它控制器内的方法。
我们来总结一下CI处理URL的具体细节(部分摘自CI中国论坛):
假如URL网址为:/control/func/param1/param2/...
URL片段 |
用途 |
定位你网站的基本URL | |
/index.php |
定位CI路由器并读取URL的其它部分,分析后定们到相关网页 |
/control |
CI将调用的控制器的名称(如果没有设置控制器名称,CI将调用你在config文件中设置的默认控制器) |
/func |
CI将调用的函数的名称,位于所调用的控制器内。(如果不存在该函数,默认调用的是index函数,除非你使用_remap) |
/param1 |
CI把这个作为传递给函数的变量 |
如果还有/param2/... |
CI把更多的参数作为变量传递给函数 |
所以上面网址可以理解为:/控制器名/方法名/方法的参数1/方法的参数2/...
总结:军哥对具体CI是如何工作的讲解的还是比较浅显和笼统的,主要目的还是先快速的带大家建立起一个对CI的初步认识,更多的后面会逐渐来深入。
好,这讲就到这吧,下一讲我们来学习如何具体来写一个控制器、方法和视图,然后我们自己写一个大家都懂的例子——“Hello World!”
CI(CodeIgniter)学习第二讲的更多相关文章
- CI(CodeIgniter)学习第一讲
一.CI的优势一. (1).CI是一个PHP框架:大家都知道PHP框架有很多,CI只是其中之一,框架是为了重用发明的.同样,CI的目标是实现让你比从零开始编写代码更快速地开发项目.CI可以将需要完成的 ...
- python学习第二讲,pythonIDE介绍以及配置使用
目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...
- 购物商城学习--第二讲(maven工程介绍)
接下来第二讲介绍整体工程如何使用maven搭建的. 使用maven管理工程的好处: jar包的管理: 工程之间的依赖管理: 自动打包 maven常见打包方式:jar.war和pom三种.jar工程,是 ...
- android学习-第二讲(修改项目名称和图标,log,过滤器)
一.在app/src/main/res下有 AndroidManifest.xml打开,打开后如下图1 二.日志工具log log.v() log.d() log.i() log.w() lo ...
- 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的
[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...
- x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式
目录 x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式 一丶x86指令复习. 1.1什么是x86指令. 1.2 x86与x64下的通用寄存器 1.3 OpCode 1.4 7种寻址方式 二 ...
- MySQL实战45讲学习笔记:日志系统(第二讲)
一.重要的日志模块:redo log 1.通过酒店掌柜记账思路刨析redo log工作原理 2.InnoDB 的 redo log 是固定大小的 只要赊账记录在了粉板上或写了账本上,之后即使掌柜忘记了 ...
- PE文件格式详解,第二讲,NT头文件格式,以及文件头格式
PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...
- MFC原理第二讲.MFC的初始化过程
MFC原理第二讲MFC的初始化过程 一丶简介 通过上一讲.我们手工模拟了一个MFC程序. 但是上一讲留下了疑问. 就是WinMain在哪.以及消息处理在哪里. 这一节主要就是讲解Winmain在哪里. ...
随机推荐
- Keil C51 知识点
第一节 Keil C51扩展关键字 深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一.因为大多数扩展功能都是直接针对8051系列CPU硬件的.大致有以下8类: 8051存储类型 ...
- grok 添加字段
filter { grok { match =>[ "message","%{IPORHOST:clientip} \[%{HTTPDATE:time}\] \&q ...
- 在 Azure 虚拟机上部署反恶意软件解决方案
本博客文章由我和我的同事 Sung Hsueh 共同撰写,Sung Hsueh 是 Microsoft Azure 计算部负责安全事项的项目经理. 本博客文章为"虚拟机扩展程序"系 ...
- 自己实现的简单MVC框架(类似Struts2+Spring)
一.框架简介 本框架是一个类似于Struts2+Spring的框架,目的在于个人钻研和技术分享,将流行技术框架Struts2.Spring中使用到的主要技术以较为简化的方式实现出来,给大家一个更直观的 ...
- Java Fuck Bignumber
为了熟悉java , 开一套poj大数处理的题来写. ------------------------------------------------------------------- A: (1 ...
- UVa156.Ananagrams
题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 11374 Airport Express(枚举+最短路)
枚举每条商业线<a, b>,设d[i]为起始点到每点的最短路,g[i]为终点到每点的最短路,ans便是min{d[a] + t[a, b] + g[b]}.注意下判断是否需要经过商业线.输 ...
- 《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法
public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法.其中,public是权限修饰符,表明任何类或对象都可 ...
- goahead webserver源码分析
1.一个txt文本架构图 main() | |--websOpenServer() | |-- websOpenListen() | ...
- handsontable的核心方法
1.为handsontable添加钩子方法 addHook(key,callback):key为钩子方法名 <span style="font-size:18px;"> ...