PHP的CI框架的目录结构(一):Application文件夹

(原创内容,转载请注明来源,谢谢)

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

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2016-07-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏liulun

基于.net开发chrome核心浏览器【三】

本篇我们讲解怎么用CefGlue开发一个最简单的浏览器 一: CefGlue是建立在Cef项目之上的, Cef项目是C/C++的项目; CefGlue只不过是通...

2285
来自专栏V站

存储为web所用格式 PHP 将图片按创建时间进行分类存储的实现代码

以上就介绍了存储为web所用格式 PHP 将图片按创建时间进行分类存储的实现代码,包括了存储为web所用格式方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

20012
来自专栏张戈的专栏

Linux基础知识之文件隐藏属性

这几天温习下 Linux 基础知识,基础里面较为薄弱的知识点我会在这里记录一下,以便回头查看 ---- Linux 下的文件除了权限属性,还有一些隐藏属性,必须...

3098
来自专栏九彩拼盘的叨叨叨

location 对象详解

Location 对象包含有关当前 URL 的信息。 可通过 window.location 属性来访问。

742
来自专栏章鱼的慢慢技术路

运用模块方式写单片机程序

1356
来自专栏Jerry的SAP技术分享

给谷歌输入法增添自定义词组,提高输入效率

我在写微信公众号文章时,经常需要重复输入一些名词,比如CRM,C4C,S/4HANA等等。为了减少输入,我在查找一款输入法,能够让我通过少量的输入,就能够快速打...

771
来自专栏小狼的世界

Vimperator的有用操作

可以有一个变通的办法复制,先按下"Ctrl+V",然后再用快捷键复制,接下来Vim的快捷键又起作用了。现在还有一个困惑的地方是不用鼠标,如何选中网页中自己希望的...

703
来自专栏开源优测

AutoLine源码分析之Flask初始化模块

下面我们看下在manage.py中如何调用create_app来初始化全局flask运行环境的。

1113
来自专栏24K纯开源

记录visual Studio使用过程中的两个问题

      Visual Studio是Windows平台下进行项目管理和开发的终极利器。除了微软自家的技术外,新版的VS不但支持Javascript, Pyt...

18010
来自专栏企鹅号快讯

py3.6+xadmin的自学网站搭建

xadmin安装 由于安装时需要依赖包并且暂时不支持py3等原因,直接pip install的方法很容易就狗带了。 说一下我在网上找到的安装方式,在GitHub...

23610

扫码关注云+社区