# 第四章 后端目录结构及准备工作
# 后端目录结构
在正式开始开发之前,我先来熟悉下lin-cms-tp5的目录结构。运行PhpStorm,在开发工具中打开lin-cms-tp5的所在目录。在开发工具左边的资源管理中我们会看到大概如下的目录结构:
根目录
├─application 应用目录
│ ├─api 模块目录
│ │ ├─behavior 行为目录
│ │ ├─controller 控制层目录
│ │ │ ├─cms 开发CMS API目录
│ │ │ └─v1 开发普通API目录
│ │ ├─model 模型层目录
│ │ └─validate 验证器目录
│ ├─http 模块目录
│ │ └─middleware 中间件目录
│ ├─index 模块目录
│ │ └─controller 控制层目录
│ ├─lib 类库文件目录
│ │ ├─auth 权限校验类库目录
│ │ ├─exception 自定义异常类库目录
│ │ ├─file 文件上传类库目录
│ │ └─token 令牌类库目录
│ │
│ ├─provider.php 应用容器绑定定义文件
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─tags.php 应用行为扩展定义文件
│
├─config 应用配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置
│
├─route 路由定义目录
│ ├─route.php 路由定义
│ └─... 更多
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─thinkphp 框架系统目录
│ ├─lang 语言文件目录
│ ├─library 框架类库目录
│ │ ├─think Think类库包目录
│ │ └─traits 系统Trait目录
│ │
│ ├─tpl 系统模板目录
│ ├─base.php 基础定义文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php 助手函数文件
│ └─logo.png 框架LOGO文件
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
└─think 命令行入口文件
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
现阶段不着急一下子理解每一个目录作用和含义,有些目录随着我们开发的深入会用到,到时候再详细讲解;有些目录则是TP5框架或者开源项目作者为了实现某些功能而定义的,一般情况下并不需要我们关心。
这里我们重点关注的是application\api
这个模块目录,在该目录下,有behavior
、controller
、model
、validate
,四个目录,其中controller
、model
、validate
,这三个目录会是接下来后端开发过程中经常要打交道的目录,以下逐个进行介绍:
- controller
controller目录就是我们前面章节中介绍的控制层,在这个目录下我们会放置很多控制器类,前端在请求一个具体的url
地址后,框架的路由
机制根据我们定义的路由规则,把这个请求路由到对应的控制器类。
路由是什么?打个比方,有一栋写字楼,里面有很多公司,你来到大厦的前台,问:请问XXXX公司在哪里?前台翻了一翻手上的登记本,答:前面左转上电梯X楼XXXX号,然后你就奔那而去了。这里面大厦就好比后端在运行的系统,前台就起到了一个路由的功能,前台根据你问的公司名字(接口地址,是一个url)查登记本(路由定义文件,里面定义了不同url所对应的控制器),然后指引你去到目的地(转发到指定的控制器)。当然,如果前台发现你这个公司并不存在,就会告诉你,抱歉,这里没有这家公司(熟悉的404页面)。
controller目录下又分了cms
和v1
两个子目录,这两个子目录并不是必须,但是推荐这么做。这么做的目的就是为了区分不同的控制器类型便于日后管理和维护。cms
目录下,我们只定义跟具体业务无关的控制器,比如新建管理账号、分组等等;v1
则定义跟具体业务有关的控制器,在项目源码中给出了一个关于图书管理
的示例控制器。
v1目录同时也充当了一个版本号的作用。在真实业务开发场景中,随着功能的迭代发展,我们可能会开发一套新接口,v2的版本,但是原接口出于某些原因不能直接废弃掉,这时候我们就可以创建一个v2的目录,在里面写新的控制器,让新旧接口并存。但无论是V多少,都应该是和具体业务有关的,后续我们的开发都是基于v1目录。
- model
model
目录就使我们前面章节中介绍的模型层,在这个目录下我们会放置很多模型类,用来封装数据模型或者和数据库打交道。
- validate
validate
目录是用来放置自定义验证器类用的。在真实开发场景中,数据校验都是必不可少的环节,而且是双重(甚至多重)的校验,即前端需要校验(比如说一个前端页面有一个表单,前端要校验输入的内容是否合法,不合法就不给提交,这时候还没向后端发起请求);前端校验通过了发起请求调用后端接口并提交表单数据,数据到了后端,后端在正式执行业务逻辑之前也要再校验一次,通过了才会开始执行业务逻辑。这里自定义验证器类的作用就是用来验证前端提交过来的数据,校验通过则继续执行业务逻辑,校验不通过则抛出一个异常信息告知前端。
就如同产品经理永远想象不到用户会怎么使用自己的产品一样,你也想象不到用户会利用前端给你提交了什么,无论是有意还是无意,所以谨记一点,永远不要相信前端或者用户提交的数据,一定要校验。
# 准备工作
- 导入原型APP数据库表
原型APP的项目是有一套完整据库表的,这里我们需要先导入这些表作为我们的素材库,方便我们后续的开发。数据库表我已经打包并放在了百度云:https://pan.baidu.com/s/1GEw_6Wv_QLT2l7ZLx4tPuw 密码:kpem
已购买《ThinkPHP5.0+小程序商城构建全栈应用》视频课程并部署过课程数据库的同学可以略过此步。
下载完数据库表的打包文件后,启动你的WampServer并点击右下角的图标,选择phpMyAdmin
并登陆。登陆后先点击我们前面创建好的zerg
数据库,再点击界面右边上方菜单栏的导入
进入导入的页面后,点击选择文件,选中刚刚下载下来的zerg.sql
文件并确定,然后拉到页面最下方,点击执行,一切顺利的话你会看到
具体每张表的作用这里不作解释,说了大家也记不住,后面实战开发的时候跟着需求实现来逐个击破。