[TOC]
## 簡介
在本節里,我們介紹一下 ThinkPHP 生成的項目目錄結構以及使用 **多應用** 模式開發生成的 ThinkBBS 項目目錄結構。
## ThinkPHP項目目錄結構
ThinkPHP 默認創建的項目是單應用模式,以下是框架為我們生成的 ThinkBBS 項目目錄結構。如 [官方文檔](http://www.hmoore.net/manual/thinkphp6_0/1037483) 所說應用目錄下的 `BaseController.php`、`Request.php` 和 `ExceptionHandle.php` 三個文件是系統默認提供的基礎文件,我們可以隨意移動或刪除這三個文件。不過需要注意的是移動文件時需要同步調整命名空間,而刪除或修改 `Request.php` 和 `ExceptionHandle.php` 類名時,必須同步調整 `provider.php` 文件中的容器對象綁定。
```
. 項目根目錄
├── app 應用目錄
│?? ├── BaseController.php 控制器基礎類
│?? ├── common.php 公共函數文件
│?? ├── controller 控制器目錄
│?? │?? └── Index.php
│ │
│?? ├── event.php 事件定義文件
│?? ├── ExceptionHandle.php 應用異常處理類
│?? ├── middleware.php 全局中間件定義文件
│?? ├── provider.php 容器Provider定義文件
│?? └── Request.php 應用請求對象類
│
├── config 配置目錄
│?? ├── app.php 應用配置
│?? ├── cache.php 緩存配置
│?? ├── console.php 控制臺配置
│?? ├── cookie.php Cookie設置
│?? ├── database.php 數據庫配置
│?? ├── filesystem.php 文件磁盤配置
│?? ├── lang.php 多語言配置
│?? ├── log.php 日志配置
│?? ├── middleware.php 中間件配置
│?? ├── route.php URL和路由配置
│?? ├── session.php Session配置
│?? ├── trace.php Trace配置
│?? └── view.php 視圖配置
│
├── public WEB目錄(對外訪問目錄)
│?? ├── favicon.ico 網站頭像文件
│?? ├── index.php 入口文件
│?? ├── robots.txt Robots配置文件
│?? ├── router.php 快速測試文件
│?? └── static 用于apache的重寫
│
├── route 路由定義目錄
│?? └── app.php 路由定義文件
│
├── composer.json composer 定義文件
├── extend 擴展類庫目錄
├── LICENSE.txt 授權說明文件
├── README.md README 文件
├── runtime 應用的運行時目錄(可寫,可定制)
├── think 命令行入口文件
├── vendor Composer類庫目錄
└── view 視圖目錄
```
## 為什么使用多應用模式開發
在這里,我們簡單介紹一下本項目使用多應用模式開發的原因。雖然 ThinkPHP6.0 默認是使用單應用模式開發項目,而在這里我們使用多應用模式開發是因為:
1. 整個項目的前后臺應用的使用者和操作行為的關聯性不大,另外當開發的項目比較龐大或前后端關聯性不強時大家通常都會選擇前后臺分離開發;
2. 多應用開發比單應用模式復雜(ps: 同時由于框架版本屬于剛發布,還沒有完全穩定,遇到 Bug 的概率也比較大),所以當你掌握多應用開發后可以快速掌握單應用模式開發。
## ThinkBBS 目錄結構
遵循 [開發規范](../c1_base/01060_開發規范.md) , 在本教程里我們按多應用模式來開發 ThinkBBS,我們會創建以下三個應用:
1. **后臺應用**(admin)—— 主要實現后臺管理頁面,通常只有控制器和視圖模板代碼;
2. **前臺應用**(index)—— 主要實現前臺用戶頁面,通常也只有控制器和視圖模板代碼;
3. **共用應用**(common)—— 主要包含前后臺應用共用的數據模型(model)、驗證器(validate)和異常(Exception)等內容代碼。
首先,我們需要安裝擴展 `think-multi-app` 使項目變成多應用模式開發:
```shell
$ composer require topthink/think-multi-app
```
接下來,我們用 [think build](http://www.hmoore.net/manual/thinkphp6_0/1037643) 命令生成以上應用目錄結構。
1. 生成共用(common)應用目錄結構:
首先,在 `app` 目錄下增加一個 `build.php` 文件,內容如下:
*app/build.php*
```php
<?php
return [
// 需要自動創建的文件
'__file__' => [],
// common 需要自動創建的目錄
'__dir__' => ['model', 'exception', 'validate'],
];
```
其次,執行 `think build` 命令生成應用目錄:
```shell
$ php think build common
```
最后,因為 `common` 應用不需要控制器,所以我們刪除生成的 `controller` 目錄:
```shell
$ rm -rvf app/common/controller
```
2. 生成前臺( index )和后臺( admin )應用的目錄:
首先,把 `app/build.php` 文件修改成以下內容:
*app/build.php*
```php
<?php
return [
// 需要自動創建的文件
'__file__' => [],
// common 需要自動創建的目錄
'__dir__' => ['view'],
// 需要自動創建的控制器
'controller' => [],
];
```
其次,執行以下命令生成應用目錄:
```php
// 生成前臺應用
$ php think build index
// 生成后臺應用
$ php think build admin
```
3. 我們還需要刪除 `app/controller` 這個文件夾,因為系統根據該文件夾作為判斷是否單應用的依據:
```shell
$ rm -rvf app/controller
```
4. 多應用模式開發時視圖模板默認是存儲在應用內的 `view` 文件夾(如:app/index/view),所以我們可以把項目根目錄的 view 文件夾也刪除了:
```shell
$ rm -rvf view
```
以下是我們最終生成的多應用模式 app 目錄結構:
```shell
.
├── admin
│?? ├── common.php
│?? ├── controller
│?? │?? └── Index.php
│?? ├── event.php
│?? ├── middleware.php
│?? ├── provider.php
│?? └── view
│
├── common
│?? ├── common.php
│?? ├── event.php
│?? ├── exception
│?? ├── middleware.php
│?? ├── model
│?? ├── provider.php
│?? └── validate
│
├── index
│?? ├── common.php
│?? ├── controller
│?? │?? └── Index.php
│?? ├── event.php
│?? ├── middleware.php
│?? ├── provider.php
│?? └── view
│
├── BaseController.php
├── build.php
├── common.php
├── event.php
├── ExceptionHandle.php
├── middleware.php
├── provider.php
└── Request.php
```
## 效果預覽
我們用瀏覽器分別打開項目 [前臺首頁](http://bbs.test/index) 和 [后臺首頁](http://bbs.test/admin) 查看一下是否正常。
首臺首頁預覽效果:

后臺首頁預覽效果:

## Git 代碼版本控制
下面把代碼納入到版本管理:
```shell
$ git add -A
$ git commit -m "生成目錄結構"
```
- 第一章 基礎信息
- 序言
- 關于作者
- PHP和ThinkPHP
- 如何正確閱讀本書
- 寫作約定
- 開發規范
- 章節體例
- 本書源碼
- 第二章 舞臺布置
- 開發環境
- 產品分解
- Git和GitHub
- 創建項目
- 數據庫視圖管理工具
- 統一代碼風格
- 目錄結構
- 配置信息
- 后臺應用搭建
- 助手函數
- 前臺布局模板
- 基礎控制器
- 小結
- 第三章 注冊登錄
- 數據遷移
- 表單提交
- 表單驗證
- 模型驗證
- 短信提供商
- 發送短信
- 手機驗證
- 注冊提醒
- 登錄與退出
- 重置密碼
- 數據填充
- 小結
- 第四章 用戶相關
- 個人中心
- 編輯個人資料
- 上傳圖片
- 上傳頭像
- 顯示頭像
- 限制頭像分辨率
- 裁剪頭像
- 顯示注冊時間
- 授權訪問
- 小結
- 第五章 帖子列表
- 話題分類
- 話題模型
- 話題列表
- 性能優化
- 分類話題列表
- 話題列表排序
- 用戶發布的話題
- 分頁器美化
- 小結
- 第六章_帖子CURD
- 創建話題
- 生成摘要
- 編輯器優化
- 上傳圖片
- 顯示話題
- 編輯話題
- 刪除話題
- 小結
- 第七章 帖子回復
- 回復模型
- 回復列表
- 發表回復
- 刪除回復
- XSS 安全漏洞
- 小結
- 第八章 角色權限和管理后臺
- 多角色用戶權限
- 用戶管理
- 話題管理
- 回復管理
- 小結
- 第九章 雜項
- 邊欄活躍用戶
- 用戶最后登錄時間
- 邊欄資源推薦
- 站點首頁
- 小結
- 第十章 總結
- 全書總結
- 附錄
- 淺談ThinkPHP6.0 路由