[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 "生成目录结构"
```
- 第一章 基础信息
- 序言
- 关于作者
- PHP和ThinkPHP
- 如何正确阅读本书
- 写作约定
- 开发规范
- 章节体例
- 本书源码
- 第二章 舞台布置
- 开发环境
- 产品分解
- Git和GitHub
- 创建项目
- 数据库视图管理工具
- 统一代码风格
- 目录结构
- 配置信息
- 后台应用搭建
- 助手函数
- 前台布局模板
- 基础控制器
- 小结
- 第三章 注册登录
- 数据迁移
- 表单提交
- 表单验证
- 模型验证
- 短信提供商
- 发送短信
- 手机验证
- 注册提醒
- 登录与退出
- 重置密码
- 数据填充
- 小结
- 第四章 用户相关
- 个人中心
- 编辑个人资料
- 上传图片
- 上传头像
- 显示头像
- 限制头像分辨率
- 裁剪头像
- 显示注册时间
- 授权访问
- 小结
- 第五章 帖子列表
- 话题分类
- 话题模型
- 话题列表
- 性能优化
- 分类话题列表
- 话题列表排序
- 用户发布的话题
- 分页器美化
- 小结
- 第六章_帖子CURD
- 创建话题
- 生成摘要
- 编辑器优化
- 上传图片
- 显示话题
- 编辑话题
- 删除话题
- 小结
- 第七章 帖子回复
- 回复模型
- 回复列表
- 发表回复
- 删除回复
- XSS 安全漏洞
- 小结
- 第八章 角色权限和管理后台
- 多角色用户权限
- 用户管理
- 话题管理
- 回复管理
- 小结
- 第九章 杂项
- 边栏活跃用户
- 用户最后登录时间
- 边栏资源推荐
- 站点首页
- 小结
- 第十章 总结
- 全书总结
- 附录
- 浅谈ThinkPHP6.0 路由