### 项目目录规划
[TOC=4,6]
想必关于项目目录的讨论一直是各大博客论坛的热点,公说应该这样部署项目的路径,婆说应该那样部署,都很有道理,谁也说服不了谁,往往很纠结!那么,就本项目应该怎样合理的布局项目目录才好呢,这是项目开发中遇到的第一个“坑”,我也纠结了很久,最终决定按照我的方式来填(虽然有时候很纠结,但总要选择一种方式,不是吗?)。
#### 项目整体目录
目前为止,项目文件夹的目录结构已经有了,除了application文件夹里面所包含的主要项目逻辑外,还有其它的一些文件夹,它们的主要作用是:
DC
├─application 应用目录
├─extend 扩展类库目录(可定义)
├─public 网站对外访问目录
├─runtime 运行时目录(可定义)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架核心目录
├─build.php 自动生成定义文件(参考)
├─composer.json Composer定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行工具入口
#### Application
下面我们来着重的关注一下Application目录,毕竟我们几乎全部的工作都是在它里面进行的。现在我们有两个模块Index和admin模块,一个负责前台,一个负责后台。目录结构如下:
├─application 应用目录(可设置)
│ ├─**index** 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ └─view 视图目录
│ ├─**admin** 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ └─view 视图目录
│ │
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共文件
│ ├─config.php 应用配置文件
│ ├─tags.php 应用行为扩展定义文件
│ ├─database.php 数据库配置文件
│ └─route.php 路由配置文件
可以看出index和admin模块中都包含model、controller、和view三个文件夹,这三个文件夹分别存放MVC模式中的模型、控制器和视图文件。
#### Model层重新规划
由于Model层存放的是模型,也就是与数据库中表内容相对应的类文件,而这部分数据库的操作在index和admin模块中都是需要的。所以我们将model文件夹放在Index和admin模块的外部,合二为一,这样index和admin就可以很方便的使用它了, **由于实例化Model的时候首先从本目录下(如Index或Admin)查找它,如果查找不到,就会从本目录外的common中查找,所以Model宜放在common中,从而使逻辑上也变得更清晰**,现在,整个目录结构变这样:
├─application 应用目录(可设置)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ └─view 视图目录
│ ├─admin 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ └─view 视图目录
│ ├─**common** 公共目录
│ │ ├─**model** 模型层
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共文件
│ ├─config.php 应用配置文件
│ ├─tags.php 应用行为扩展定义文件
│ ├─database.php 数据库配置文件
│ └─route.php 路由配置文件
#### Model层分层
为了实现数据与操作的分离,model层进一步细化为model层、logic层、service层,这些默认是放在某个模块下的,如在index模块中logic层默认的目录是index/logic,这样ThinkPHP才能找到它,如果没找到它的话,ThinkPHP会到模块外部的Common文件夹中找它,service层也是这样的,如果我们想index和admin两个模块都使用它们,那么我们需要把它们放在application\common文件夹中,这就需要在application中新建一个common文件夹。现在目录结构变成这样:
├─application 应用目录(可设置)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ └─view 视图目录
│ ├─admin 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ └─view 视图目录
│ │
│ ├─model 模型目录
│ ├─**common** 公共目录
│ │ ├─**model** 模型层
│ │ ├─**logic** 逻辑层
│ │ ├─**service** 服务层
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共文件
│ ├─config.php 应用配置文件
│ ├─tags.php 应用行为扩展定义文件
│ ├─database.php 数据库配置文件
│ └─route.php 路由配置文件
#### 模型验证
由于在ThinkPHP5中将模型验证也与模型分离了出来,放在每个模块下专门的validate文件夹中,而验证无论是前台或后台向数据库中写数据都是需要的,ThinkPHP查找它的方法与前述查找logic层的方法是一样的,
先在本模块的validate文件夹中找它,如果找不到就调到本模块外层的common文件夹中寻找。同样地,我们将它放在模块外层的common文件家中。现在,目录变成如下的样子:
├─application 应用目录(可设置)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ └─view 视图目录
│ ├─admin 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块公共文件
│ │ ├─controller 控制器目录
│ │ └─view 视图目录
│ │
│ ├─model 模型目录
│ ├─common 公共目录
│ │ ├─model 模型层
│ │ ├─logic 逻辑层
│ │ ├─service 服务层
│ │ ├─**validate** 模型验证
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共文件
│ ├─config.php 应用配置文件
│ ├─tags.php 应用行为扩展定义文件
│ ├─database.php 数据库配置文件
│ └─route.php 路由配置文件
好了,以上就是我关于ThinkPHP5在实际项目中目录规划的一点建议,如有不妥,请批评指正!