导读
本章先讲解TP6的多应用模式,在多应用模式下很多初学者会遇到很多坑,课程都有提及,再讲解5层架构建设让系统能够做到代码高度解耦,多复用等能力。并且还讲解了不可预知的内部异常处理、中间件等,关于服务,事件内容会在实战课程中渗透。
多应用模式
安装开始多应用
TP5是不需要安装扩展就可以开启多应用的,tp6需要使用composer来开启多应用模式扩展,注意:多应用下,控制器只能在该应用中使用。
composer require topthink/think-multi-app
多应用模式下路由规则容易犯的错误
如果多应用模式,需要在当前应用创建路由文件夹Route,同时要使用TP6提供的门面模式类引入Route
注:访问时要注意在地址后面必须写上路由在哪个应用下,否则找不到控制器
架构分层-初学者最容易犯的错误
意义
初学者和小公司开发项目
比如说:在一张数据表中需要查询出category_id为2的所有有数据,且增加一列categoryName字段的值为汉字,不能联合查询
以上代码可以看出,控制器中把model层的逻辑也写在了自己本层的方法中,如果后期有其他的地方需要调取这个逻辑,代码显得就会很痛苦,初学者经常这样做
代码分层-模型内容抽离
将需要模型层操作的数据抽离到model层中去完成
很多人认为没有你要进行empty判断,因为如果空数据就会返回空Array,这里不建议这么操作,上述操作可减少IO请求
基础架构分层思想-5层架构
1.模型层 职责:只是获取数据库的数据
2.业务层 职责:组装数据
3.控制器层:负责接收数据,调用业务层的数据,然后给api
4.lib :调用基础的类库文件,跟业务无关
5.视图层:模板引擎
模型层可以放置在公共模块下,因为无论哪个模块都会使用数据库,其实TP6提供了一个common目录就是来存放公共模块相关文件的
五层架构的目录分层设计
实战:
控制器层只负责接收、判断数据,调用business层
business层职责只负责调用model层数据,并进行相关处理组装
lib基础操作层后续会在项目实战中讲解到
不可预知得内部异常处理
处理方式一:
在app/ExceptionHandle.php->render()方法中,可添加自定义异常处理机制,无需try catch,直接抛出api格式的异常
处理方式二:
第一种处理方式是多应用模式下的公共文件,换句话说就是所有模块都会加载这个文件,并且抛出同样的异常格式
所以不能将异常处理文件放在公共目录,而是单独应用单独创建
为每个模块单独设立异常处理,注意provider.php的异常设置
优化处理方式二:
前面的http状态码是固定的,通过:
稍作修改
但是这是使用throw的方式抛出异常,如果还是代码运行过程中出错,比如输出未定义的变量 a b c , 那 么 网 页 将 停 止 运 行 , 事 实 上 是 abc,那么网页将停止运行,事实上是 abc,那么网页将停止运行,事实上是e中并未存在getStatusCode这个值的
所以要进一步进行判断
这样就不会再产生上述问题
玩转中间件处理
中间件是php5.1.6以后引入的思想,中间件主要用来处理一些http的请求,比如说过滤、拦截等,
中间件解决了之前老的做法,创建base控制器,其他控制器继承base控制器,base控制器继承controller控制器
官方手册:https://www.kancloud.cn/manual/thinkphp6_0/1037493
注:方法名是固定的
注册中间件
除此以外还可以定义中间件的结束调度任务
如果针对单个的方法或者单个的控制器去实现中间件,那么就需要结合路由中间件去实现