TP6玩转高逼格框架服务【代码高度解耦】

导读

本章先讲解TP6的多应用模式,在多应用模式下很多初学者会遇到很多坑,课程都有提及,再讲解5层架构建设让系统能够做到代码高度解耦,多复用等能力。并且还讲解了不可预知的内部异常处理、中间件等,关于服务,事件内容会在实战课程中渗透。


多应用模式

安装开始多应用

TP5是不需要安装扩展就可以开启多应用的,tp6需要使用composer来开启多应用模式扩展,注意:多应用下,控制器只能在该应用中使用。

composer require topthink/think-multi-app

在这里插入图片描述

多应用模式下路由规则容易犯的错误

如果多应用模式,需要在当前应用创建路由文件夹Route,同时要使用TP6提供的门面模式类引入Route

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SlPnlfLd-1616635076813)(1F1179F8DBEE4E9A8ED61BA96CA7FD73)]

注:访问时要注意在地址后面必须写上路由在哪个应用下,否则找不到控制器

架构分层-初学者最容易犯的错误

意义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ipuA1Pl1-1616635076814)(6E5C4701A9AB4343B8831729B8958481)]

初学者和小公司开发项目

比如说:在一张数据表中需要查询出category_id为2的所有有数据,且增加一列categoryName字段的值为汉字,不能联合查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LIolVzi1-1616635076817)(04C1059B3CF543F0978D67F797ACAED4)]

以上代码可以看出,控制器中把model层的逻辑也写在了自己本层的方法中,如果后期有其他的地方需要调取这个逻辑,代码显得就会很痛苦,初学者经常这样做


代码分层-模型内容抽离

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SK149cnv-1616635076818)(816C3641FDC5447AAA5892FDE569F973)]

将需要模型层操作的数据抽离到model层中去完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uoW0eCvO-1616635076820)(C115EBB2D5224F86A29A5A4009420B6C)]

很多人认为没有你要进行empty判断,因为如果空数据就会返回空Array,这里不建议这么操作,上述操作可减少IO请求

基础架构分层思想-5层架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cDvwQP2h-1616635076821)(1EB977A1167447178FFE89145A857D41)]

1.模型层 职责:只是获取数据库的数据

2.业务层 职责:组装数据

3.控制器层:负责接收数据,调用业务层的数据,然后给api

4.lib :调用基础的类库文件,跟业务无关

5.视图层:模板引擎

模型层可以放置在公共模块下,因为无论哪个模块都会使用数据库,其实TP6提供了一个common目录就是来存放公共模块相关文件的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FAl1PGaO-1616635076822)(2382211535574AC6A3B50FB5010598D1)]

五层架构的目录分层设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gOvGi2tb-1616635076822)(1F4B2765DA0F48B3A615D8C901DD6C3B)]

实战:

控制器层只负责接收、判断数据,调用business层

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h71vImko-1616635076823)(A462D29B5B7F4838B0933F64D699E0DC)]

business层职责只负责调用model层数据,并进行相关处理组装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ky2Db93d-1616635076824)(0631160AC9954C92A27BA473B498DB96)]

lib基础操作层后续会在项目实战中讲解到


不可预知得内部异常处理

处理方式一:

在app/ExceptionHandle.php->render()方法中,可添加自定义异常处理机制,无需try catch,直接抛出api格式的异常

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IsqehWz-1616635076824)(934B82676FC54BDFB1239B34317593E9)]

处理方式二:

第一种处理方式是多应用模式下的公共文件,换句话说就是所有模块都会加载这个文件,并且抛出同样的异常格式

所以不能将异常处理文件放在公共目录,而是单独应用单独创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gE3Sqzrc-1616635076825)(98AA0944BC2141CB94B94620551C067F)]

为每个模块单独设立异常处理,注意provider.php的异常设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wpnLSrEN-1616635076826)(646FE8202127417390F8C4191CCE173C)]

优化处理方式二

前面的http状态码是固定的,通过:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IzIV8SE-1616635076827)(648ABE89E8EE46048FA8BEB00FDAE05D)]

在这里插入图片描述

稍作修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXfuX5mG-1616635076828)(20C785D0F4D5426DACD89A936BB34801)]

但是这是使用throw的方式抛出异常,如果还是代码运行过程中出错,比如输出未定义的变量 a b c , 那 么 网 页 将 停 止 运 行 , 事 实 上 是 abc,那么网页将停止运行,事实上是 abce中并未存在getStatusCode这个值的

所以要进一步进行判断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1p11NBjd-1616635076829)(BDE94097FA0646CAA64B655828DE7738)]

这样就不会再产生上述问题

玩转中间件处理

中间件是php5.1.6以后引入的思想,中间件主要用来处理一些http的请求,比如说过滤、拦截等,

中间件解决了之前老的做法,创建base控制器,其他控制器继承base控制器,base控制器继承controller控制器

官方手册:https://www.kancloud.cn/manual/thinkphp6_0/1037493

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLCCSQ99-1616635076829)(975051C2A29540B9955D05A62B325876)]

注:方法名是固定的

注册中间件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LExAAaHQ-1616635076830)(FBF44F398A614FEEB894C1A86183FFF6)]

除此以外还可以定义中间件的结束调度任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-snGCSaFG-1616635076830)(75D0B67A4AC14E0D9A586BFFF669A475)]

如果针对单个的方法或者单个的控制器去实现中间件,那么就需要结合路由中间件去实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FzvT02s3-1616635076831)(696E3D8D45FA432FA0A5FC68363BD2D9)]

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜夕啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值