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 条评论
登录 后参与评论

相关文章

来自专栏梦魇小栈

crontab 踩坑之绝对路径

由于放假后网络原因不方便使用电脑,需要创建一个 crontab 定时任务,用来在每天固定时间执行一个 Shell 脚本

1253
来自专栏zcqshine's blog

android6.0 drawable 的变化

3487
来自专栏用户画像

使用Maven管理Jar包

②点击Maven project,在右侧会出现下图的菜单栏,点击刷新,即可pom文件所有的jar包到本地仓库

882
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(二十) ——Redis命令在redis服务器执行过程

《Redis设计与实现》读书笔记(二十) ——Redis命令在redis服务器执行过程 (原创内容,转载请注明来源,谢谢) 序:redis服务器是redis一切...

3394
来自专栏贾老师の博客

Linux coredump

1743
来自专栏Java成神之路

Struts框架搭建时所遇到的问题

        解决方案:将以下7个jar拷贝到项目工程中_(workspace_项目名_webRoot_WEB-INF_lib下),其他用到的包再慢慢添加: ...

735
来自专栏增长技术

获得一个Git仓库

既然我们现在把一切都设置好了,那么我们需要一个Git仓库。有两种方式可以得到它:一种是从已有的Git仓库中 clone(克隆,复制);还有一种是新建一个仓库,把...

801
来自专栏Ken的杂谈

Cookie的特点和使用经验/建议总结

Cookie就是以Key,Value的形式存储在浏览器端的数据。 https://baike.baidu.com/item/cookie/1119

1262
来自专栏性能与架构

nginx 缓存机制

Nginx缓存的基本思路 利用请求的局部性原理,将请求过的内容在本地建立一个副本,下次访问时不再连接到后端服务器,直接响应本地内容 Nginx服务器启动后,会对...

4876
来自专栏www.96php.cn

【fastadmin安全篇】设置全局 HtmlPurifier 安全过滤

首先下载HtmlPurifier 链接:https://github.com/ezyang/htmlpurifier

1803

扫码关注云+社区