S1开发手册
前言
安装
规范
目录结构
框架
程序执行流程
入口文件
验证架构
验证架构
验证架构
验证架构
验证架构
应用模块
依赖注入
控制器架构
逻辑架构
验证架构
模型架构
行为架构
插件架构
服务架构
数据操作
系统常用配置
系统常用常量
系统常用函数
模块开发
模板制作
基础操作
本文档使用
零起飞
构建
控制器架构
本文最后编辑时间:
2023-08-02 08:54:02
热度:
517
ThinkPHP V5.0的控制器定义比较灵活,可以无需继承任何的基础类,也可以继承官方封装的\think\Controller类或者其他的控制器类。 ![图片alt](/upload/picture/20230802/7db1a4c369cc50c708a5bd0f7c212f85.png ''图片title'') 代码分析: 在admin模块下面一个日志记录控制器Log, log这个控制器继承层次关系了,Log继承了 AdminBase 继承了 ControllerBase。 Log类实例化之前会执行父类构造函数,那么执行的流程就是 ControllerBase -> AdminBase -> Log ![图片alt](/upload/picture/20230802/a5bdd00c9d0c12f62807e4a9cf3a08e7.png ''图片title'') 代码看到 class Log extends AdminBase,说明此类继承了 AdminBase,通过命名就可以猜测到这个就是admin模块的基础控制器,既然继承了AdminBase 那肯定是会先执行父类的构造方法, 然后打开AdminBase.php发现class AdminBase extends ControllerBase ,而 ControllerBase 是公共模块下的控制器根源,因为再往下看就是 class ControllerBase extends Controller,Controller是框架的控制器就不讲了有需要了解的直接看tp文档,所以咱们将ControllerBase当做最底层的控制器。 通过分析咱们大概就心里有个控制器继承层次关系了,Log继承了 AdminBase 继承了 ControllerBase。 因为类实例化之前会执行父类构造函数,那么执行的流程就是 ControllerBase -> AdminBase -> Log 此处只是随便拿一个操作来讲解,其他控制器类也是一样的流程,当然也有例外 比如 Login 控制器,因为在AdminBase 中有登录验证,若继承AdminBase那岂不是验证不通过,那就没办法登录咯。 但是 Login 中咱们还需要获取请求信息,而请求信息是在ControllerBase中进行的初始化,所以此处就直接跳过了AdminBase,继承 ControllerBase,这样就不用验证登录并且使用请求信息了。 其他模块下的控制器也是一样,可以看到api模块下的控制器中有 ApiBase.php,index模块下的控制器中有IndexBase.php等。 控制架构设计中,这种多层父类控制器是有好处的,比如咱们想整套系统执行时都执行某操作,那么所有模块下的控制器都会执行 ControllerBase, 那就可以放在 ControllerBase中,若咱们想在api模块下做一个请求频率限制而不影响其他模块,那么咱们就可以把代码放在 ApiBase.php中触发。
零起飞网络版权所有