news 2026/8/26 15:06:19

HookPHP项目目录结构全解析:看懂9大目录,理清热插拔架构设计思路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HookPHP项目目录结构全解析:看懂9大目录,理清热插拔架构设计思路

HookPHP项目目录结构全解析:看懂9大目录,理清热插拔架构设计思路

【免费下载链接】HookPHPHookPHP基于C扩展搭建内置AI编程的架构系统-支持微服务部署|热插拔业务组件-集成业务模型|权限模型|UI组件库|多模板|多平台|多域名|多终端|多语言-含常驻内存|前后分离|API平台|LUA QQ群:679116380项目地址: https://gitcode.com/gh_mirrors/ho/HookPHP

HookPHP 是一款基于 Yaf C 扩展搭建的 PHP 框架,内置热插拔业务组件与微服务部署能力。刚拿到这个项目,是不是被一堆目录搞得眼花缭乱?别担心!本文用9 大目录带你一图看懂 HookPHP 的目录结构,10 分钟理清它的热插拔架构设计思路,零基础也能快速上手。

📁 一分钟总览:9大目录结构图

先把整棵"目录树"放在这里,后文逐个拆解:

HookPHP/ ├── public/ # ① Web 入口目录(唯一对外窗口) ├── config/ # ② 配置中心(MySQL / Redis) ├── app/ # ③ 应用核心(大脑) │ ├── Bootstrap.php # 启动引导器 │ ├── controllers/ # ④ 全局控制器 │ ├── views/ # ⑤ 全局视图模板 │ ├── models/ # ⑥ 数据模型层 │ ├── library/ # ⑦ 基础类库(Module / Hook) │ ├── modules/ # ⑧ 热插拔模块区 ⭐ │ ├── plugins/ # ⑨ 插件(钩子插件) │ └── services/ # 业务服务层 ├── runtime/ # 运行时目录(缓存 / 日志) ├── composer.json # 依赖清单 └── hookphp.sql # 数据库初始化脚本

💡一句话记忆public/管入口,config/管配置,app/管一切业务,runtime/管运行痕迹。

🚪 public/ 目录:唯一的 Web 入口

public/是整个应用对外暴露的唯一窗口,Web 服务器的根目录应指向这里。

  • public/index.php:全局唯一入口文件。它定义了APP_PATH、加载 Composer 自动加载,然后创建Yaf\Application并调用bootstrap()->run()启动整个框架。
  • robots.txtsitemap.xml:为搜索引擎准备的 SEO 文件,说明项目对多平台、多站点场景的友好设计。

⚙️ config/ 目录:配置中心如何连接 MySQL 与 Redis

config/只放两个配置文件,但作用关键:

文件职责
config/app.php应用配置,自动扫描app/modules/下所有目录并注册为模块
config/database.php数据库配置,内置 MySQL 与 Redis(default业务库 +cache缓存库)双连接

🔑 热插拔的第一块拼图就藏在app.php里:它用glob()遍历app/modules/*,意味着你新建一个模块目录,它就自动被注册,无需手工改任何配置。

🧠 app/ 目录:应用大脑的 5 步启动流程

app/是核心中的核心,先看总调度员 app/Bootstrap.php。它在框架启动时依次执行 5 个初始化步骤:

  1. _initLoader:为ServicesExtensions每一个模块注册命名空间,模块代码从此"开箱即达";
  2. _initPlugin:注册HookPlugin钩子插件(后文详述);
  3. _initDatabase:建立数据库连接并注入注册表;
  4. _initModel:初始化HookModelModuleModel两个模型;
  5. 其余_init*步骤按字母序自动执行。

启动顺序、依赖注入全靠它编排,是理解框架运转的钥匙。

app/controllers/ 与 app/views/:全局默认页面区

存放不属于任何模块的全局页面:

  • app/controllers/Index.php:默认首页控制器;
  • app/views/index/index.phtml:默认首页视图。

它们和模块内部的控制器、视图完全隔离,职责清晰不越界。

app/models/ 目录:数据模型层

  • DatabaseModel:统一获取数据库连接;
  • app/models/Module.php:ModuleModel通过关联查询hookmodule_hookmodule三张表,得出"某个钩子点上挂载了哪些已启用的模块"——这是热插拔的数据底座。

app/library/ 目录:可复用的基础类库

  • app/library/Module.php:抽象基类Module,内置install()/uninstall()/enable()/disable()四个生命周期方法,统一维护数据库extensions表,并暴露onInstall()等钩子供子类扩展;
  • app/library/Hook.php:静态类Hook::run($key),负责执行某个钩子点上挂载的全部模块。

这两个文件只有几十行,却撑起了整个热插拔体系,值得细读。

app/plugins/ 与 app/services/:钩子插件与业务服务

  • app/plugins/Hook.php:HookPlugin继承 Yaf 插件基类,在框架请求周期的7 个关键时刻routerStartuprouterShutdowndispatchLoopStartuppreDispatchpostDispatchdispatchLoopShutdownpreResponse)自动调用Hook::run()
  • app/services/HookService.php:Services命名空间下的业务服务层,适合放置与模块解耦的可复用业务逻辑。

🔌 app/modules/ 目录:热插拔组件的家(核心重点)

这是 HookPHP 最有特色的目录:一个模块 = 一个完整的"迷你应用",自带控制器、视图和模块主类。以横幅模块为例:

app/modules/HookBanner/ ├── HookBanner.php # 模块主类(继承 Module) ├── controllers/ # 模块自己的控制器(Index / Api) └── views/Index/ # 模块自己的视图

📌 以 app/modules/HookBanner/HookBanner.php 为例,它重写了onInstall()(建ip_logs表)和onUninstall()(删表),实现了装模块建数据、卸模块清数据的干净安装体验。旁边的HookMonitor模块同理,是内置的监控组件。

✨ 热插拔全流程只有三步:

  1. 把模块目录放入app/modules/→ 配置自动扫描注册;
  2. 调用模块install()安装 → 写入extensions表并执行onInstall()
  3. 管理端enable()/disable()切换状态 → 钩子点即时生效或失效,全程无需改动框架核心代码

🗂️ runtime/ 目录:缓存与日志的"工作车间"

runtime/是运行期目录,用于存放缓存、日志等临时产物(Yaf 配置中开启了yaf.cache_config=1,配置缓存也会落在这里)。它应该可清空、可重建,并建议配置为 Web 不可访问。

🪝 热插拔架构设计思路:7 个钩子点串联一切

把前面的目录串起来,整条链路一目了然:

请求进入 public/index.php ↓ Bootstrap 启动 → 注册 HookPlugin ↓ 请求周期 7 个关键时刻触发 Hook::run('钩子点') ↓ ModuleModel 查表:该钩子点挂载了哪些 status=1 的模块? ↓ 按 position 顺序依次执行各模块方法 ↓ 汇总输出,继续下一环节
  • 钩子点定义在框架核心(app/plugins/Hook.php);
  • 模块与钩子点的绑定关系存在数据库里(初始化脚本见 hookphp.sql);
  • 所以"插件"的增删改,本质是改数据 + 放目录,框架本体纹丝不动——这正是热插拔架构的精髓。

🧩 快速回顾:5 点记忆表

#目录一句话职责
1public/唯一入口,对外窗口
2config/模块自动扫描 + 双库配置
3app/Bootstrap.php5 步启动总调度
4app/modules/热插拔模块的家 ⭐
5app/plugins/7 个钩子点的"接线板"

看懂这 9 大目录,你就掌握了 HookPHP 的骨架:核心保持稳定,业务全部插件化。下一步不妨照着HookBanner的结构新建一个自己的模块目录,体验一次"放入即注册"的热插拔流程,你会彻底理解这套架构的设计巧思!

【免费下载链接】HookPHPHookPHP基于C扩展搭建内置AI编程的架构系统-支持微服务部署|热插拔业务组件-集成业务模型|权限模型|UI组件库|多模板|多平台|多域名|多终端|多语言-含常驻内存|前后分离|API平台|LUA QQ群:679116380项目地址: https://gitcode.com/gh_mirrors/ho/HookPHP

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 15:06:14

LHDC V5 手机到耳机音乐传输链路详解

以手机本地播放 test1.mp3 通过 LHDC V5 编码传输到蓝牙耳机并播放为例,详细说明从文件到声音的完整技术链路。 LHDC V5 三部曲导航: LHDC V5 编解码流程与原理详解LHDC V5 手机到耳机音乐传输链路详解LHDC V5 算法深度解析 一、整体链路概览 ┌────…

作者头像 李华
网站建设 2026/8/26 15:05:06

3步接入PingFangSC字体:从克隆到网页生效,TTF和WOFF2怎么选

3步接入PingFangSC字体:从克隆到网页生效,TTF和WOFF2怎么选 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC PingFangSC是一个字体…

作者头像 李华
网站建设 2026/8/26 15:01:03

Maka Agent诊断日志系统怎么运作?AI助手故障排查完全指南

Maka Agent诊断日志系统怎么运作?AI助手故障排查完全指南 【免费下载链接】maka Apache Maka (Incubating) is a local-first AI agent workspace. Model messages, tool calls, tool results, permission decisions, and termination events are recorded as an ap…

作者头像 李华
网站建设 2026/8/26 14:58:29

PUBG压枪宏3步搞定:5分钟用罗技鼠标压住枪

PUBG压枪宏3步搞定:5分钟用罗技鼠标压住枪 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 瞄准敌人胸口按住扳机,前两发打…

作者头像 李华