[TOC] ## 简介 在本节里,我们介绍一下 ThinkPHP 生成的项目目录结构以及使用 **多应用** 模式开发生成的 ThinkBBS 项目目录结构。 ## ThinkPHP项目目录结构 ThinkPHP 默认创建的项目是单应用模式,以下是框架为我们生成的 ThinkBBS 项目目录结构。如 [官方文档](https://www.kancloud.cn/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](https://www.kancloud.cn/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) 查看一下是否正常。 首台首页预览效果: ![Index Home](http://tbs.zhanghong.info/images/chapters/02/050_index_app_60.pngg) 后台首页预览效果: ![Admin Home](http://tbs.zhanghong.info/images/chapters/02/050_admin_app_60.png) ## Git 代码版本控制 下面把代码纳入到版本管理: ```shell $ git add -A $ git commit -m "生成目录结构" ```