1、CI的文件结构;
了解CI的文件结构能够帮助咱们快速的对CI框架有一个总体的认识,就好像咱们去了一个陌生的城市同样,对你来说周围的一切都是陌生和未知的,要想快速的了解这座城市,你能够买一张这座城市的地图,总体的了解这座城市的方位、结构和风景等等之类的。
2、CI是如何工做的。
咱们不光要对CI框架要有一个总体的认识,同时还要清楚CI是如何工做的,这样才能快速的掌握和运用CI,还拿刚才去一个陌生城市来讲吧,若是你想很快的 适应和融入这座城市,是否咱们有必要知道一些关于这座城市的风土人情和文化习俗呢。我想仍是颇有必要的吧,毕竟咱们得入乡随俗呀。
固然,军哥这里只是简单的介绍一下,让你们有一个大概的思惟认知。
一、CI的文件结构。
你们还记得第一讲中的CI目录结构图吗,当时并没怎么详细说明,咱们再来看一下。
根据上图咱们能够知道,CI主要组成部分为,
application(应用文件夹)、
system(系统文件夹)和
index.php入口文件。
应用文件夹中主要是存放控制器、模型和视图等,系统文件夹中主要是存放组成CI的核心文件的,index.php入口文件是一个单一入口文件,所谓单一文件是指在一个网站(应用程序)中,全部的请求都是指向的这么一个文件,由它负责接收并处理URL中的控制器和方法。
换句话说, 它调用一个 '控制器', 而后返回一个'视图'。
具体对单一入口文件的介绍我引用了高洛峰老师在BroPHP中对它的一个解释。以下:
单一入口文件:
在使用PHP过程化编程时,每一个PHP文件都能独立访问并运行,就像一个体育场有多个入口同样,须要在每一个入口都要检票和安全检查。而采用单一入口模式进 行项目部署和访问,不管完成什么功能,一个项目只有一个统一(但不必定是惟一)的入口,就像一个体育场若是只能从一个入口入场(程序是抽象的,一个入口和 多个入口效率是同样的)控制起来则更灵活,几乎没有什么缺点。使用主入口文件部署项目的优势以下:
一、加载文件方便
在编写和阅读过程化程序代码时,常常会遇到文件之间互相包含,其中包括PHP使用include包括函数库和公共资源文件,也包括在HTML中使 用<link>和<script>加载CSS和javaScript文件。项目越大,文件越多越让人感受头疼,就像一张大网同样 将文件交织在了一块儿,不容易找到头绪。而使用单一入口则解决这个难题,在项目应用中用到的任何一个文件,只要相对于单一入口文件的位置查找便可。
二、权限验证容易
若是每一个PHP文件均可以独立访问,在作用户权限验证时就须要对每一个文件进行判断。而采用单一入口则只须要在一个位置进行判断便可。
三、URL重写简单
若是每一个PHP文件和不一样目录下的PHP文件均可以独立访问,则在Web服务器中对URL进行从新编写时须要不少条规则。而采用单一入口则在URL重写时只须要简单的几条规则便可。php
好,接着来具体看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使用经验。
二、那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/...
因此上面网址能够理解为:/控制器名/方法名/方法的参数1/方法的参数2/...
总结:军哥对具体CI是如何工做的讲解的仍是比较浅显和笼统的,主要目的仍是先快速的带你们创建起一个对CI的初步认识,更多的后面会逐渐来深刻。
好,这讲就到这吧,下一讲咱们来学习如何具体来写一个控制器、方法和视图,而后咱们本身写一个你们都懂的例子——“Hello World!”app