(原创内容,转载请注明来源,谢谢)
CI框架全名CodeIgniter,是PHP的一个开源框架。和多数基于MVC架构的框架类似,CI框架的初始源码主要分为三大块:system文件夹、application文件夹、index.php入口文件。CI框架的目录如下图所示:
index.php:该文件是基于CI框架开发的网站的入口文件,CI框架为单一入口的框架,如果没有经过index.php而直接输入Application/Controller以外的路径,将无法打开页面,这也保证了网站的安全性。
system文件夹:内部包含CI框架开发者对于CI框架的基本配置,包括引导性文件、基础controller、基础model、基础配置、输入输出、路由、URL、数据库操作、session等一系列的配置。对于CI框架的使用者来说,这部分内容通常是不需要进行任何改动的(需要改动的地方都可以在application文件夹下进行继承覆盖),这部分内容后续的文章中再做深入研究。
application文件夹:这个文件夹是CI框架使用者实现网站业务功能的文件夹,目录如下图所示:
下面详细分析一下application文件夹(即下面描述的内容都是在application文件夹下的内容,很多文件名和system文件夹下的文件一样,请不要搞混)。
1:config文件夹:该文件夹内的文件都是继承system下的config文件,用户对于CI框架的配置可以在这里编写,这里的配置将会替换system/config文件夹下的配置文件。config文件夹内的配置都采用多维数组的形式,因此,任何的配置都支持多个配置(多个url、多个数据库调用、多个变量等),只要在调用的时候输入不同的数组下标即可。
config文件夹主要包括路由配置(route.php)、数据库配置(database.php)、系统配置(config.php)、全局变量配置(constant.php)等。在route.php中,可以配置用户默认调用的controller文件夹下的某个文件的某个方法。在database.php,可以配置CI框架调用的数据库的IP、数据库名、数据库登入的用户名和密码、数据库端口,支持配置多个数据库(甚至多种类型的数据库)。在config.php中配置字符类型、controller前缀、允许的url格式、是否写日志及日志路径和格式、session的时间及数组名等。另外,我也习惯把controller中常用的变量写到config.php内,该做法类似定义一个常量,为了预防常量太多导致常量冲突的问题 ,所以推荐使用配置的方法来定义常用的变量。
另外,CI框架的思想之一就是减少配置,所以很多配置文件中都有默认配置,如果非必要的情况下可以不去配置,但是database.php文件必须配置,毕竟每个项目的数据库不会一样。
2:core文件夹:这个文件夹在刚刚下载下来的源码中是空文件夹,但是这个文件夹比较关键,通常开发的时候会在该文件夹中放置两个php文件,假设项目名称叫phpthinker,则通常会新建两个文件夹,一个叫做Phpthinker_Controller.php,另一个叫做Phpthinker_Model.php。(关于文件命名规则后续内容再提及)。Phpthinker_Controller.php将继承system文件夹内的CI_Controller.php文件,Phpthinker_Controller.php的主要目的是作为其他controller的父类文件,登陆判断通常在该文件中编写, 其他controller继承该文件后,就会调用该文件的登陆判断进行判断用户是否登陆,简化网站程序。Phpthinker_Model.php同理,其继承CI_Model.php,作为其他model的父类,一些常用的sql语句(如分页)可以写在该model中,供其它model调用。
3:library 文件夹:该文件夹主要用来存放其他调用的类,这些类可以是网上的一些开源的php资源,也可以是自己编写的类。例如:php处理excel的常用类PHPExcel、PHP进行邮件发送的PHPMailer类、PHP调用图片相关的JpGraph类等,另外,我也将验证码生成类、Ajax处理类、登陆用户信息类等放置在该目录中,供controller调用。
4:log文件夹:该文件夹用于存放网站编译、执行过程中的日志文件,在config.php中可以设置该文件夹的默认命名规则、记录日志的等级,默认按天进行命名,每天一个log,记录除了notice以外的错误等级。在调试的过程中,如果想追溯变量执行过程中的具体值,可以用log_message('error',变量名),执行到这句话的时候就会把变量打到日志中。
5:controller、model、view即控制器、模型、视图,MVC的具体内容在后续文章中将会讲解,初步来说,controller用来放置处理逻辑、model用来放置数据库操作、view用来放置网站的外观。
6:另外,CI框架没有为JS、CSS、图片、供用户下载的文件模板等专门配置文件夹,因此在编程的过程中可以自己在application目录下创建一个文件夹,用来存放这些内容。关于创建后的文件调用也将在后续的内容中进行详解。
—— written by linhxx 2016.07.09