专栏首页决胜机器学习PHP的CI框架的目录结构(一):Application文件夹

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),作者:linhxx

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《Redis设计与实现》读书笔记(二十七) ——Redis哨兵(sentinel)主服务器下线判断与故障转移

    《Redis设计与实现》读书笔记(二十七) ——Redis哨兵(sentinel)主服务器下线判断与故障转移 (原创内容,转载请注明来源,谢谢) 一、主观下线检...

    用户1327360
  • PHP数据结构(一)——顺序结构线性表

    PHP数据结构(一)——顺序结构线性表 (原创内容,转载请注明来源,谢谢) 线性表的要求:存在唯一的“第一个”元素与“最后一个”元素,每个元素最多一个前驱和一个...

    用户1327360
  • 卷积神经网络(四) ——目标检测与YOLO算法

    卷积神经网络(四) ——目标检测与YOLO算法 (原创内容,转载请注明来源,谢谢) 一、概述 目标检测,主要目的是在图片中,分类确认是否有需要的物体,如果有则标...

    用户1327360
  • matplotlib 设置绘图时显示中文

    matplotlib绘图时,经常会遇到中文字体显示为方块的问题。网上有很多解决方案,比较普遍的是在代码里增加下面两行。

    超哥的杂货铺
  • 滑动窗口也能用于实例分割,陈鑫磊、何恺明等人提出图像分割新范式

    作者:Xinlei Chen、Ross Girshick、Kaiming He、Piotr Dollar

    机器之心
  • 使用Docker快速搭建Nginx+PHP-FPM+MySQL+phpMyAdmin环境

    fastcgi_pass 地址为:主机ip+9000。因为在上面的步骤中,我已经把端口映射出来了。

    py3study
  • 区块链:慈善腐败的克星

    根据慈善援助基金会发布的一份报告(币文库全文下载),区块链技术最终可用于执行很多传统监管机构的功能。

    D13
  • 了解PHP-FPM

    在服务器上,当我们查看php进程时,全都是php-fpm进程,大家都知道这个就是php的运行环境,那么,它到底是个什么东西呢?

    硬核项目经理
  • 区块链+智能城市 引领创新新未来

    智慧城市的提法由来已久。1992 年,新加坡提出“智慧岛计划”,并于2006 年启动“智慧国 2015”计划,自此全球开启一波智慧城市建设热潮。

    用户2357564
  • 微服务架构解析:API Fortress,一曲数字化交响乐

    我最喜欢设计和构建的东西,就是作业编排。我乐于设想软件的每个组成部分是如何构成一幅宏大的图景,系统在高负载或者系统失败等各种不同的场景下如何产生反馈。

    yuanyi928

扫码关注云+社区

领取腾讯云代金券