首页 > CMS > PhpCMS > 正文

phpcms2008, phpcmsV9, yaf, ThinkPHP, QeePHP, CodeIgniter, Zend Framework

2024-09-10 07:16:07
字体:
来源:转载
供稿:网友

phpcms2008,phpcmsV9,yaf,ThinkPHP,QeePHP,CodeIgniter,Zend Framework 目录结构小结.

说明:

本文希望通过查看一些开源的 PHP 项目和 PHP 框架发现有利于模块化的项目目录结构规则.

# PHPCMS 2008

  1. admin ——核心模块后台控制器 
  2.      * templates ——核心模块后台模板 
  3. data ——文件缓存目录 
  4. images ——css, js, jpg 等文件目录 
  5. include ——核心模块定义类文件。 
  6.      * admin ——核心模块后台定义类文件(如类,函数) 
  7.      * dict ——中文分词数据文件 
  8.      * fields ——文章模型自定义字段文件。 
  9.      * fonts ——字体文件 
  10.      * ipdata ——IP数据文件 
  11. languages ——多语言包 
  12.      * zh-cn ——简体中文 
  13.           ** phpcms.lang.php ——核心模块语言包 
  14.           ** guestbook.lang.php ——留言模块语言包 
  15. templates ——前台模板目录 
  16.      * default ——默认样式 
  17.           ** phpcms ——核心模块前台模板 
  18.           ** guestbook ——留言模块前台模板 
  19. uploadfile ——上传文件目录 
  20. guestbook ——留言模块 
  21.      * admin ——留言模块后台控制器 
  22.           ** templates ——留言模块后台模板 
  23.      * include ——留言模块定义类文件。 
  24.      * index.php ——留言模块首页。 
  25. admin.php ——后台管理界面入口文件。 
  26. index.php ——网站首页。 

phpcms2008 没使用单一入口结构,所以处理请求的页面(被浏览器直接访问)散落在各个模块目录下,比如 guestbook/index.php.

此结构分成“核心+模块”的目录结构,核心模块就是 phpcms 自身,包括后台管理,后台菜单,文章模型等 cms 的核心功能,模块则像“留言”模块。

此结构明确地提出“模块”的概念,并以一级目录划分模块(/guestbook/)。

但是,cms 核心功能并没有作为一个“模块”,于是在 admin.php 后台入口中会看到类似这样的代码:

if ('phpcms' != $mod) { $path = "{$mod}/admin/{$file}.php"; }

需要判断目标路径是否核心(即 phpcms),核心则不需要追加模块路径,否则便加上模块目录路径,因此这种结构造成了路径的不统一。

另外,有两个公共目录 templates 和 languages,这两个目录下却以模块划分,包括核心,即 templates/phpcms.这两个目录中的文件是在安装一个模块时从模块目录的 install 目录下复制过去的,这也造成了路径的不统一.

实际上,把前端模板都放在 templates/ 目录下是有作用的,在 SVN 中设置权限就很多便,只需要把 templates 目录设为前端人员开放即可,否则,若各模块的模板分散在各模块中,就像后台模板,那就得遂个模块地设置权限.

include 目录下的文件没有很好的分类,使得里面还包含了如 IP 数据库,字体这样的文件。

小结:此结构明确地以目录划分出“模块”的概念,但目录结构还不够清晰和统一.

# PHPCMS V9

  1. admin.php  ——后台管理入口 
  2. index.php  ——程序主入口 
  3. uploadfile  ——网站附件目录 
  4. statics  系统附件包 
  5.      * css ——系统css包 
  6.      * images ——系统图片包 
  7.      * js ——系统js包 
  8. caches ——缓存文件目录 
  9. phpcms  ——phpcms框架主目录 
  10.      * languages ——框架语言包目录 
  11.           ** zh-cn ——简体中文 
  12.                *** comment.lang.php ——评论模块语言文件。 
  13.      * libs ——框架主类库、主函数库目录 
  14.           ** classes ——类定义文件,主要是公共代码。 
  15.           ** data ——分词数据,字体,IP数据目录 
  16.           ** functions ——函数定义文件,主要是公共代码。 
  17.      * model ——框架数据库模型目录 
  18.           ** comment_data_model.class.php ——评论模块的一个模型。 
  19.           ** content_check_model.class.php ——内容模块的一个模型。 
  20.      * modules ——框架模块目录 
  21.           ** comment ——评论模块目录 
  22.                *** classes ——类定义文件。 
  23.                *** functions ——函数定义文件。 
  24.                *** install ——安装模块时用到的文件。 
  25.                     **** languages ——安装时会复制到 phpcms/languages 下。 
  26.                     **** templates ——安装时会复制到 phpcms/templates/default/comment 下。 
  27.                *** templates ——后台模板。 
  28.                *** index.php ——前台控制器(类定义文件) 
  29.                *** comment_admin.php ——后台控制器(类定义文件) 
  30.      * templates ——框架系统模板目录 
  31.           ** default ——默认模板样式 
  32.                *** content ——内容模块的模板目录 
  33.                *** comment ——评论模块的模板目录。 
  34.      * base.php 框架入口文件。  //Vevb.com 
  35. phpsso_server  ——phpsso主目录(另一个系统,目录下的结构跟上面一样) 

因为属于 phpcms 的不同版本,因此跟 phpcms 2008 对比着看:

此结构使用了单一入口的结构,因此在根目录下的文件比较少。

此结构使用了 static 表示 css, js 这类静态文件,代替 phpcms2008 中的 images 目录。

在 phpcms 目录中,有 languages, model, templates 公共目录,分别存放各模块相应类型的文件。

phpcms/libs 目录就相当于 phpcms2008 的 include 目录。

phpcms/modules 就是各模块目录了,此结构中没像 phpcms2008 那样分成“核心+模块”,而是所有功能都是模块,其中 cms 功能就是 content(内容)模块.

小结:明确地用目录划分出“模块”的概念,并且所有功能都以模块的形式存在,但不明白为什么 model 要作为公共目录,而不是分散在各模块目录之下.

# Yaf 2.2.7 框架

  1. public 
  2.      * index.php ——入口文件 
  3.      * .htaccess ——重写规则     
  4.           ** css 
  5.           ** img 
  6.           ** js 
  7. conf 
  8.      * application.ini ——配置文件    
  9. application 
  10.      * controllers ——默认模块控制器目录 
  11.           ** Index.php ——默认控制器 
  12.      * views ——默认模块视图目录 
  13.           ** index   ——控制器名 
  14.                *** index.phtml ——默认视图 
  15. modules ——其他模块 
  16.      * mymod ——mymod模块目录(下级目录结构跟 application 目录结构相似) 
  17. library ——本地类库 
  18. models  ——model目录 
  19. plugins ——插件目录 

此结构使用的是单一入口结构,因此根目录文件较少,并且入口文件及 css, img, js 这类静态文件单独地放在 public 目录下,与其它源代码文件相分开,在配置服务器时只需要把 public 设为根目录即可,可避免其它源代码文件直接被浏览器访问.

使用了“默认模块+其它模块”的结构,在 application 目录下的为默认模块,在 modules 目录下的为其它模块,明确地以目录划分出了“模块”的概念.

不明白为什么 models 目录放在根目录下,而不是分散在各模块目录中.

# ThinkPHP 3.0 框架

分两种模式,一是不使用“模块分组”,另一种是使用“模块分组”.

## 不使用模块分组

  1. ThinkPHP ——框架目录 
  2. Public ——公共资源目录(即 css, js, img 这类) 
  3. Uploads ——上传文件目录 
  4. Home ——前台项目目录 
  5.      * Common ——公共文件目录,如公共类,函数。 
  6.      * Conf ——项目配置目录。 
  7.      * Lang ——语言包 
  8.      * Lib ——类库目录 
  9.           ** Action ——控制器目录 
  10.           ** Model ——模型目录。 
  11.      * Tpl ——模板目录 
  12. Admin ——后台管理项目目录。 
  13. index.php ——home项目入口文件。 
  14. admin.php ——admin项目入口文件。 

此结构基本看不出“模块”的概念,连前台与后台都需要分成两个项目(Home,Admin)来划分.

## 使用模块分组

ThinkPHP ——框架目录

  1. App ——项目目录 
  2.      * Common ——公共文件目录 
  3.           ** Home ——Home分组的公共文件。 
  4.      * Conf ——配置目录 
  5.      * Lib ——类库目录 
  6.           ** Action ——控制器目录 
  7.                *** Home ——Home分组控制器 
  8.           ** Model ——模型目录 
  9.                *** Home ——Home分组模型目录。 
  10.      * Tpl ——模板目录 
  11.           ** Home ——Home分组模板目录 
  12. Public ——略 
  13. Uploads ——略 
  14. index.php ——入口文件。 

同样看不出“模块”的概念,使用“分组”概念把上面前后台要分两个项目的结构组合成“分组”的结构.

小结:ThinkPHP 的目录结构并不利于模块化,因为一个模块的若干文件都需要分散于多个不同的目录下,又或者,把一个模块做成一个“项目”或“分组”.

# Fleaphp 框架

  1. App ——项目目录 
  2.      * Admin ——后台文件 
  3.           ** Controller ——控制器目录 
  4.           ** Model ——模型目录 
  5.           ** View ——模板目录。 
  6.      * Front ——前台文件(下级目录结构与 App/Admin 相似) 
  7. FLEA ——框架目录 
  8. Stuff ——静态资料文件目录 
  9.      * css 
  10.      * images 
  11.      * js 
  12. index.php ——前台入口文件。 
  13. admin.php ——后台入口文件。 

此框架年代久远,其主页已不存在,在不看源代码的情况下,只能通过网上一些零散的文章拼凑出它的目录结构.

此结构与 ThinkPHP 的结构基本相似.

# QeePHP 框架

  1. _code ——保存所有的代码,以及配置文件等。 
  2.      * app ——项目目录 
  3.           * controller ——控制器目录 
  4.           * model ——模型目录 
  5.           * view ——模板目录 
  6.      * config ——配置文件目录 
  7.      * lib ——第三方库文件 
  8. _devel ——保存应用程序开发过程中使用到的文件(如数据库安装SQL)。 
  9. css 
  10. js 
  11. img 
  12. index.php ——入口文件 

明确地使用 lib 目录保存第三方库文件(yaf 框架也有 library 目录,但其用户手册中并没明确说明是否用于保存第三方库文件)。

其余跟 FleaPHP 相似.

# CodeIgniter 2.1.0 框架

  1. application ——项目目录 
  2.      * controllers ——控制器(用户手册中表示可以建立子目录对控制器进行划分) 
  3.      * models ——模型目录。(用户手册中表示支持子目录划分) 
  4.      * views ——模板目录(用户手册中表示支持子目录划分) 
  5. system ——框架目录 
  6. index.php ——入口文件 

比较简单的一个目录结构,且 MVC 三个目录好像都支持自定义任意层级的子目录结构,因为其加载代码是这样的:

$this->load->view('folder_name/file_name');

$this->load->model('blog/queries');

查看用户手册,发现 CI 中也有类似于 ThinkPHP 的“模块分组”的概念,目录结构可以是:

applications/foo/controllers/ ——foo 分组

applications/bar/controllers/ ——bar 分组。

# Zend 框架

  1. application ——项目目录 
  2.      * controllers ——控制器目录 
  3.      * models ——模型目录 
  4.      * views —— 模板目录 
  5. library 
  6.      * Zend Framework 
  7. public ——公共资源目录 
  8.      * images 
  9.      * scripts 
  10.      * styles 

通过几个框架的目录结构对比,可以发现框架的目录结构基本都很相似.

# 小结

上述目录结构,大概可分成两类:

1. 以“模块”概念为第一级目录划分的结构;

2. 以 MVC 结构为第一级目录划分的结构。

以“模块化”的角度来看,以“模块”为第一级目录划分更有利于模块化,因为并不是所有模块都使用 MVC 三层结构(比如一个用于生成压缩包的功能模块),并且更利于模块内文件的管理。

另外:单一入口可使目录结构更灵活多变,应优先考虑使用单一入口结构。

使用一个 lib 目录保存所有第三方代码可方便地区分项目代码与第三方代码,源代码版本管理时也能方便地把第三方代码排除在外。

使用一个 public 目录保存需要被浏览器直接请求的文件,其余文件放在 public 目录之外,可以避免浏览器直接访问其它文件(如类定义文件).

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表