CI(CodeIgniter)学习第二讲

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/...



  URL片断java

  用途数据库

 
定位你网站的基本URL

  /index.php编程


定位CI路由器并读取URL的其它部分,分析后定们到相关网页

  /control浏览器


CI将调用的控制器的名称(若是没有设置控制器名称,CI将调用你在config文件中设置的默认控制器)

  /func缓存


CI将调用的函数的名称,位于所调用的控制器内。(若是不存在该函数,默认调用的是index函数,除非你使用_remap)

  /param1安全


CI把这个做为传递给函数的变量

  若是还有/param2/...服务器


CI把更多的参数做为变量传递给函数

  因此上面网址能够理解为:/控制器名/方法名/方法的参数1/方法的参数2/...


总结:
军哥对具体CI是如何工做的讲解的仍是比较浅显和笼统的,主要目的仍是先快速的带你们创建起一个对CI的初步认识,更多的后面会逐渐来深刻。


好,这讲就到这吧,下一讲咱们来学习如何具体来写一个控制器、方法和视图,而后咱们本身写一个你们都懂的例子——“Hello World!”app

相关文章
相关标签/搜索