### 項目目錄規劃
[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在實際項目中目錄規劃的一點建議,如有不妥,請批評指正!