S1开发手册
前言
安装
规范
目录结构
框架
程序执行流程
入口文件
应用模块
依赖注入
控制器架构
逻辑架构
验证架构
模型架构
行为架构
插件架构
服务架构
数据操作
系统常用配置
系统常用常量
系统常用函数
模块开发
模板制作
基础操作
本文档使用
零起飞
构建
控制器架构
本文最后编辑时间:
2025-05-19 09:28:47
热度:
832
ThinkPHP V5.0的控制器定义比较灵活,可以无需继承任何的基础类,也可以继承官方封装的\think\Controller类或者其他的控制器类。  代码分析: 在admin模块下面一个日志记录控制器Log, log这个控制器继承层次关系了,Log继承了 AdminBase 继承了 ControllerBase。 Log类实例化之前会执行父类构造函数,那么执行的流程就是 ControllerBase -> AdminBase -> Log  代码看到 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中触发。
提供完善五心级服务,满足用户需求,注重用户体验,为客户打造融入个性需求的企业信息化服务解决方案。
Copyright © 2015~2025 07FLY All Rights Reserved