博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tp3.2分层
阅读量:3737 次
发布时间:2019-05-22

本文共 1413 字,大约阅读时间需要 4 分钟。

摘自tp3开发手册 思考一下分层

多层控制器

ThinkPHP的控制器支持多层和多级,多层指的是控制器可以分层,例如除了默认的Controller控制器层(我们可以称之为访问控制器),还可以添加事件控制器(层),例如:

├─Controller 访问控制器│ ├─UserController.class.php│ ├─BlogController.class.php│ ...├─Event 事件控制器│ ├─UserEvent.class.php│ ├─BlogEvent.class.php│ ...

访问控制器的名称是通过DEFAULT_C_LAYER设置的,默认是Controller。

访问控制器负责外部交互响应,通过URL请求响应,例如 http://serverName/Home/User/index,而事件控制器负责内部的事件响应,并且只能在内部调用,所以是和外部隔离的。

多层控制器的划分可以根据项目的需要自由分层。

如果是定义其他的控制器层,则不一定必须要继承系统的Controller类或其子类,通常需要输出模版的时候才需要继承Controller类。例如:

UserEvent事件控制器位于 Home/Event/UserEvent.class.php

模型分层

ThinkPHP支持模型的分层 ,除了Model层之外,我们可以项目的需要设计和创建其他的模型层。

通常情况下,不同的分层模型仍然是继承系统的\Think\Model类或其子类,所以,其基本操作和Model类的操作是一致的。

例如在Home模块的设计中需要区分数据层、逻辑层、服务层等不同的模型层,我们可以在模块目录下面创建ModelLogicService目录,把对用户表的所有模型操作分成三层:

  • 数据层:Home\Model\UserModel 用于定义数据相关的自动验证和自动完成和数据存取接口
  • 逻辑层:Home\Logic\UserLogic 用于定义用户相关的业务逻辑
  • 服务层:Home\Service\UserService 用于定义用户相关的服务接口等

三个模型层的定义如下:

Model类:Home\Model\UserModel.class.php

namespace Home\Model;class UserModel extends \Think\Model{}

实例化方法:D('User');

Logic类:Home\Logic\UserLogic.class.php

namespace Home\Logic;class UserLogic extends \Think\Model{}

实例化方法:D('User','Logic');

Api类:Home\Api\UserApi.class.php

namespace Home\Api;class UserApi extends \Think\Model{}

实例化方法:D('User','Api');

D方法默认操作的模型层由DEFAULT_M_LAYER参数配置,我们可以改变默认操作的模型层为Logic层,例如:

'DEFAULT_M_LAYER' => 'Logic', // 默认的模型层名称

这样,当我们调用:

$User = D('User');

的时候其实是实例化的 UserLogic类,而不是UserModel类。

转载地址:http://yatin.baihongyu.com/

你可能感兴趣的文章
2019国内某知名科技公司技术资料
查看>>
Java+Selenium+Testng自动化测试学习(三)— 断言
查看>>
PAT乙级1012
查看>>
银行业务队列简单模拟(队列queue)
查看>>
EM算法
查看>>
C# 使用TcpClient 测试网络连接是否正常
查看>>
C# 中的 is 真的是越来越强大,越来越语义化
查看>>
.NETCore中实现ObjectId反解
查看>>
Java中Collections工具类的使用
查看>>
数据结构简述
查看>>
Java中泛型的理解以及在集合中的使用
查看>>
Java中自定义泛型类、泛型接口、泛型方法
查看>>
Java中泛型在继承上的体现
查看>>
Ajax的使用
查看>>
Java中File类的使用
查看>>
Java中对象流的使用(ObjectInputStream 和 ObjectOutputStream )
查看>>
Java中随机存取文件流:RandomAccessFile
查看>>
Path、Paths、Files的使用
查看>>
java中InetAddress类的使用
查看>>
TCP网络编程
查看>>