# Ywxapp 插件使用说明 > 适用框架:Ywxapp(基于 ThinkPHP 8 的多应用框架) > 本文逐一说明 `addon/` 目录下**全部 6 个插件**的功能、安装、配置与使用方法。 > 插件机制与开发规范详见同级《插件开发指南.md》。 --- ## 插件清单 | 插件 | 标题 | 版本 | 状态 | 形态 | 一句话简介 | | --- | --- | --- | --- | --- | --- | | `blog` | 博客应用 | 1.0.0 | 启用 | 完整业务 | 多用户博客(前台展示 / 会员中心 / 后台管理) | | `mqttbroker` | MQTT代理 | 2.1.0 | 启用 | 常驻进程 | 基于 Workerman 自研的 MQTT 3.1.1/5.0 Broker | | `haonav` | 网址导航 | 1.0.0 | 启用 | 完整业务 | 网址分类与站点收录、展示、后台管理 | | `wxchat` | 聊天应用 | 1.0.0 | 启用 | 常驻进程 | 仿微信的移动端 IM 社交(GatewayWorker) | | `smsbao` | 短信宝 | 1.0.0 | 启用 | 事件订阅 | 对接短信宝网关发送验证码(半成品) | | `demo` | 演示插件 | 1.0.0 | 启用 | 脚手架 | 插件开发规范示例骨架(仅返回一句话) | --- ## 通用:安装 / 启用 / 卸载 所有插件遵循同一套生命周期,详见《插件开发指南.md》第 4 节。常用操作: ```bash # 开发者模式(本地已放好源码时,免打包、可反复执行,幂等) php think addon:manage -a develop # 后台操作 # 插件管理 → 离线安装(上传 zip)→ 启用 / 禁用 / 卸载 ``` - **安装**:写入 `info.php`(`state`)、执行 `install.sql` 建表、注入 `menu.json` 菜单、调用 `Addon::install()` 钩子。 - **启用 / 禁用**:仅切换 `info.php` 的 `state`,并联动菜单显隐;`enable/disable` 钩子存在默认空实现。 - **卸载**:调用 `Addon::uninstall()`(清理数据表与菜单),再删除插件目录。生产环境操作前务必备份。 > 安装 / 启动命令需在**项目根目录**执行;常驻进程(Broker、IM 服务)建议在 Linux 上以 `nohup php think xxx &` 或 `supervisor` 守护。 --- ## 1. blog(博客应用) ### 1.1 功能简介 一个多用户博客平台,提供三套界面: - **前台展示(公开)**:首页(最新/热门/推荐文章、分类、标签云、最新评论)、文章详情、分类/标签筛选、搜索、作者主页、关于/联系页、RSS 订阅。 - **会员中心(需登录)**:发布/编辑/删除自己的文章、自建分类、个人资料。 - **后台管理(需管理员登录)**:仪表盘统计、文章审核、全局分类/标签、评论审核、用户管理、统计分析、站点/SEO/邮件设置。 ### 1.2 数据表(安装时自动创建,`wxapp_blog_*`) | 表 | 用途 | | --- | --- | | `wxapp_blog_article` | 文章(标题/正文/封面/作者 uid/分类/状态/置顶/计数) | | `wxapp_blog_category` | 分类(全局共享 uid=0,或会员自建) | | `wxapp_blog_tag` | 标签 | | `wxapp_blog_article_tag` | 文章-标签关联 | | `wxapp_blog_comment` | 评论(支持盖楼、审核) | | `wxapp_blog_like` | 点赞 | | `wxapp_blog_favorite` | 收藏 | | `wxapp_blog_user` | 博客用户(映射表名 `user`) | | `wxapp_blog_visit` | 访客记录 | ### 1.3 入口与菜单 - **前台入口**:`/blog`(首页)、`/blog/article/:id`、`/blog/category/:id`、`/blog/tag/:id`、`/blog/rss` 等。 - **会员中心**:`/blog/member`(强制登录)。 - **后台**:已注入菜单「博客管理」,含 仪表盘 / 文章管理 / 分类管理 / 标签管理 / 评论管理 / 用户管理 / 统计分析 / 系统设置。 ### 1.4 配置说明 - 插件 `config.php` 与 `info.php['config']` 均为空,**无独立配置项**。 - 站点 / SEO / 邮件配置通过后台「系统设置」直接写入应用级 `config/site.php`、`config/seo.php`、`config/email.php`。 ### 1.5 使用要点 - 文章由**会员在会员中心发布**,后台仅做管理与审核(不发布新文章)。 - 后台「系统设置」可配置站点信息、SEO 与邮件(发信)参数。 - 前台文章评论带敏感词过滤;互动(点赞/收藏)需登录。 ### 1.6 注意事项 - 后台路由挂载 `AdminAuth` 中间件(未登录跳转 `/admin/login`);会员路由挂载 `MemberAuth`(未登录跳 `/member/login`)。 - 自带 `READMD.md` 描述的是独立 ThinkPHP 应用形态(表名、登录账号与实现不符),**以本插件实际代码为准**。 --- ## 2. mqttbroker(MQTT 代理) ### 2.1 功能简介 基于 Workerman 自研的 MQTT 3.1.1 / 5.0 Broker(类 EMQX 轻量版): - 协议:CONNECT/PUBLISH(QoS0/1/2)/SUBSCRIBE/PING/DISCONNECT/AUTH。 - 传输:TCP(默认 1883)、WebSocket(8083,浏览器/小程序)、可选 TLS。 - 认证 / ACL、保留消息、遗嘱、离线消息持久化、共享订阅(`$share/{group}/{filter}`)。 - `$SYS/broker/#` 系统指标、`/static/addon/mqttbroker/` 实时监控仪表盘。 - 基于 Redis Stream 的多进程/WS 桥接、规则引擎转发到外部 Broker(如 EMQX)。 - 手动发布走 DB 出站队列(零外部依赖)。 ### 2.2 启动命令(常驻进程) ```bash php think mqttbroker:start # 启动 Broker(Linux 建议守护) php think mqttbroker:acltest # ACL 规则测试工具 ``` > Windows 下单进程调试模式,WebSocket 多监听在 Windows 不支持;生产请使用 Linux。 ### 2.3 数据表(`wxapp_mqttbroker_*`) 连接、消息日志、订阅关系、认证账号、ACL 规则、保留消息、离线消息、实时指标、转发规则、出站队列(共 11 张,`stats` 表有代码自愈建表)。 ### 2.4 后台入口与菜单 已注入菜单「MQTT代理」:概览 / 客户端连接 / 消息日志 / 发布消息 / 认证账号 / ACL规则 / 实时监控 / 转发规则 / 服务设置(均在 `/mqttbroker/backend/...`)。 ### 2.5 配置说明(后台「服务设置」) 配置项存于数据库 `wxapp_addon_config`(每个配置独立成行),由后台「插件管理 → 配置」或插件内「服务设置」页写入,读取走缓存(键 `addon_config_mqttbroker`)。表单字段由 `config.php` 定义,运行期默认值在 `Broker::loadConfig()` 中(`array_merge($defaults, $saved)`)。**两处默认值应保持一致**。关键项: | 配置项 | 默认值 | 说明 | | --- | --- | --- | | `port` | 1883 | TCP 监听端口 | | `host` | 0.0.0.0 | 绑定地址 | | `ws_port` | 8083 | WebSocket 端口,0=关闭 | | `ssl_enabled` | 0 | 对 TCP 启用 TLS | | `ssl_cert` / `ssl_key` | 空 | PEM 证书/私钥绝对路径 | | `allow_anonymous` | 1 | 允许匿名连接;设为 0 时需在「认证账号」维护账号 | | `acl_enabled` | 0 | 开启后按「ACL规则」校验发布/订阅 | | `acl_default` | allow | 规则未命中时的兜底策略 | | `max_keepalive` | 60 | 最大保活间隔(秒) | | `sys_enabled` / `sys_interval` | 1 / 10 | `$SYS` 指标开关与发布周期 | | `persist_retain` / `persist_offline` | 1 / 1 | 保留消息 / 离线消息持久化 | | `offline_limit` | 1000 | 单客户端离线消息上限 | | `cluster_enabled` | 0 | 集群桥接(需 Redis) | | `rule_enabled` | 1 | 转发规则引擎开关 | | `redis_*` | 127.0.0.1:6379 | 集群桥接用 Redis 连接 | | `log_level` | 1 | 日志级别(0 关 / 1 仅错误 / 2 详细) | ### 2.6 使用要点 1. 启动 Broker 进程(命令见 2.2)。 2. 后台「服务设置」按需配置端口、匿名/认证、ACL、TLS、持久化。 3. 客户端连接:`tcp://:1883` 或 `ws://:8083`;认证在「认证账号」维护,权限在「ACL规则」维护。 4. 后台「发布消息」可手动向主题推送;「实时监控」查看连接与吞吐;「转发规则」可将消息桥接到外部 Broker。 ### 2.7 事件与扩展点 - 业务侧在 `service/Broker.php` 预埋了 `mqtt_message_published` 事件(参数:`topic/payload/qos/retain/clientId`;`$SYS/` 主题不触发,qos2 在 PUBREL 后触发,确保每消息一次)。插件可监听此事件做业务联动。 ### 2.8 注意事项 - 单进程内存态(`worker->count=1`),会话/订阅在内存,保留/离线消息落库。 - 卸载会 DROP 全部 11 张表,操作前备份。 --- ## 3. haonav(网址导航) ### 3.1 功能简介 网站 / 网址导航系统(类 hao123): - 网址分类管理(预置 11 个分类:社交、视频、购物、办公 AI、金融等)。 - 网址收录与展示(预置约 138 条国内外站点),前台展示首页分类列表 + 热门站点 + 分类/站点详情。 - 后台分类、网址、配置可视化 CRUD(含回收站 / 还原)。 - 网址模型可**自动抓取目标页 meta 信息**(标题/关键词/描述,基于 Guzzle + DOMDocument)。 ### 3.2 数据表(`wxapp_haonav_*`) | 表 | 用途 | | --- | --- | | `wxapp_haonav_category` | 网址分类(树形 pid) | | `wxapp_haonav_links` | 网址信息(含全文索引、点击/热门/推荐/状态) | | `wxapp_haonav_config` | 系统配置 KV(初始化为空,需后台添加) | > 该插件**无 `Addon.php`**,安装时由框架直接执行 `install.sql`(建表 + 预置分类/站点种子数据)。 ### 3.3 入口 - **前台**:`/haonav`(首页,按分类展示)、`/haonav/category/:id`(分类详情)、`/haonav/site/:id`(站点详情)。均免登录。 - **后台**:控制器位于 `controller/backend/`(Category / Links / Configs)。 > ⚠️ **菜单未注入**:`menu.json` 三套均为空数组,后台左侧**没有菜单入口**。需直接通过 URL 访问后台控制器(如 `haonav/backend.category`),或自行在 `menu.json` 补充菜单后再 `addon:manage -a develop` 重注入。 ### 3.4 配置说明 - 无 `config.php`;配置通过数据库 `wxapp_haonav_config` 表 + 后台「Configs」控制器以 KV 形式维护。 ### 3.5 使用要点 - 前台直接访问即可浏览分类与站点。 - 后台「网址」可新增/编辑站点,保存时若填写了 URL 会自动抓取目标页 meta(需安装 `guzzlehttp/guzzle`)。 ### 3.6 注意事项 - **安全**:所有前台/后台控制器当前 `noNeedLogin = ['*']`、`noNeedVerify = ['*']`(未强制登录与鉴权),**上线前务必补充权限校验**。 - **依赖**:`Links::fetchMeta` 依赖 `guzzlehttp/guzzle`,缺失会抛异常,需 `composer require guzzlehttp/guzzle`。 - 存在调试遗留:`Index::read()` 含 `dump();die;`,`Category::updateRolePowers()` 引用了不存在的关联表,建议清理。 --- ## 4. wxchat(聊天应用) ### 4.1 功能简介 仿微信风格的移动端 IM 社交后端(GatewayWorker): - 实时聊天:单聊/群聊,文本/图片/语音/视频/文件,心跳、认证、撤回、已读回执、敏感词过滤。 - 用户体系:短信验证码登录、一键登录、完善资料、邀请码、`TokenService` 鉴权。 - 社交关系:好友、关注/粉丝/互关、亲密度等级。 - 动态(朋友圈):发布、评论、点赞、收藏、话题、浏览历史。 - APP 版本管理(`AppVersionCheck` 中间件:强制/可选更新)。 - 启动配置下发:`appConf` / `launchData` 返回聊天/广告/服务器地址等。 ### 4.2 启动命令(常驻进程) ```bash php think wxchat:server # 启动 GatewayWorker 聊天服务 ``` > `common.php` 注册了指令 `wxchat:server`;WebSocket 实际地址由 `appConf` 的 `socketUrl`(默认 `wss://dev.xixingwl.cn:2346`)下发。 ### 4.3 数据表(`wxapp_wxchat_*`) 共 20 张,含:app_versions、follow、friend、group_members、groups、intimacy、messages、message_recalls、moments(动态)、moment_comments/likes/collects/shares/medias、moment_hashtags(话题)、unread_counts、view_history 等。 ### 4.4 入口与菜单 - **前台/API**:控制器继承 `Frontend`,对外 URL 带层前缀 `/wxchat`:对外 API 为 `/wxchat/api/*`(如 `/wxchat/api/login/smsLogin`、`/wxchat/api/index/appConf`),会员中心为 `/wxchat/member/*`,后台为 `/wxchat/backend/*`。插件接口统一返回 JSON。 - **后台菜单**:`Addon::install()` 注入**空菜单数组**,且**无 `menu.json`**,因此后台不显示入口。 ### 4.5 配置说明 - 已新增 `config.php`,约 34 项配置(功能开关、业务限制、广告、服务器地址、第三方 AppId、版本兼容)现由后台「插件管理 → 配置」(`/backend/addon/setting?addon=wxchat`)可视化维护,实际值存于数据库 `wxapp_addon_config`(独立项 + 缓存)。 - `appConf()` 接口以硬编码数组作为默认值,运行时通过 `AddonService::config('wxchat')` 读取数据库配置并按类型(bool/int/string)还原后覆盖默认值下发给端。 - 数组类配置(`supportedPlatforms`)保持代码默认值,未纳入后台表单。 - **默认值一致性**:`config.php` 中声明的 `value` 应与 `appConf()` 的 `$defaults` 保持一致(开关为 `1/0`、数字为字符串形式)。 ### 4.6 事件与扩展点 - `info.php` 声明了事件订阅 `addon\wxchat\subscribe\User`,用于对接会员体系(注册/登录等系统事件),在会员注册/登录后同步 IM 账户或下发通知。 - 声明了中间件 `AppVersionCheck`(版本检查)与服务 `service\Service`。 ### 4.7 注意事项 - **登录校验**:大量控制器标注 `noNeedLogin = ['*']`,当前几乎全部接口放行,**属开发/调试状态**,上线前需开启登录与签名校验。 - `Login::index()` 含直接调用短信宝接口发短信的测试代码(含明文账号密码),上线前删除。 - 根目录 `README.md` 实为「消息协议结构设计草稿」,并非使用说明。 --- ## 5. smsbao(短信宝) ### 5.1 功能简介 对接「短信宝」第三方短信网关(`https://api.smsbao.com/sms`)的短信发送插件。属于**事件订阅 + 短信发送**型插件: - 通过 `subscribe/Smsbao.php` 监听 `SmsSend` 事件,向短信宝接口发送验证码短信。 - 短信模板固定:`【妙趣横生】您的短信验证码为:{code}, 五分钟有效,请勿告诉他人`。 ### 5.2 数据表 / 菜单 / 路由 - **无 `install.sql`**:不创建任何数据表。 - **无 `menu.json`**:`Addon::install()` 注入空菜单,后台无入口。 - **无 `route/` 目录**:不提供 HTTP 接口。 ### 5.3 配置说明 - 已新增 `config.php` 定义账号(`u`)、密码(`p`)、签名(`sign`)、模板(`template`)四个配置项;实际值存于数据库 `wxapp_addon_config`,可在后台「插件管理 → 配置」中修改,不再硬编码。默认值为迁移占位,请替换为自有账号与签名。 ### 5.4 使用要点(如何触发发短信) 在业务侧主动触发自定义事件即可调用本插件发送验证码: ```php // 业务代码(如注册/找回密码流程) event('SmsSend', [ 'mobile' => '13800138000', 'code' => '123456', ]); ``` 订阅器 `Smsbao` 的事件前缀为 `Sms`(方法 `onSend` → 事件 `SmsSend`)。`SmsGet` / `SmsNotice` / `SmsCheck` 方法当前为占位(直接 `return true`)。 ### 5.5 注意事项(重要) - 短信宝账号/密码、短信签名均为**测试硬编码值**,使用前必须替换为自己的账号/签名,并建议改为从配置项读取(新增 `config.php` 与 `.addonrc` 读写)。 - 本插件**不主动监听** `user_register_after` 等系统事件,必须由业务侧显式 `event('SmsSend', $sms)` 触发。 - 当前为**半成品**状态:无表、无菜单、无配置、控制器为空壳。 --- ## 6. demo(演示插件) ### 6.1 功能简介 插件开发规范示例骨架。唯一实际能力:`controller/Index.php::index()` 返回字符串 `这是一个addon\demo 插件应用`,访问 `/demo` 可见。其余控制器/路由/视图均为空占位。 ### 6.2 安装与结构 - 无 `Addon.php`(用系统默认 install/uninstall 钩子),无 `install.sql`(不建表)。 - 含示例 `menu.json`(frontend/member/backend 均为「一级/二级」占位菜单)、`route/app.php`(仅引入 `Route` 门面占位)。 ### 6.3 用途 - 作为新插件脚手架参考;可基于 `php think addon:make -a build` 生成更完整的骨架。 --- ## 附:命令速查 | 命令 | 归属 | 作用 | | --- | --- | --- | | `php think mqttbroker:start` | mqttbroker | 启动 MQTT Broker(常驻) | | `php think mqttbroker:acltest` | mqttbroker | ACL 规则测试 | | `php think wxchat:server` | wxchat | 启动 GatewayWorker 聊天服务(常驻) | | `php think workerman:gateway` | 框架 | GatewayWorker 通用网关 | | `php think addon:manage -a develop` | 框架 | 开发者模式安装(建表+菜单+启用,可重跑) | ## 附:状态与风险提示 | 插件 | 成熟度 | 上线前需处理 | | --- | --- | --- | | blog | 完整可用 | 无需特殊处理 | | mqttbroker | 完整可用 | 生产用 Linux 守护;按需配置认证/ACL/TLS | | haonav | 基本可用 | 后台菜单未注入;补登录鉴权;装 guzzle | | wxchat | 开发态 | 开启登录/签名校验;删除测试发短信代码;补后台菜单 | | smsbao | 半成品 | 替换硬编码账号/签名;改为配置驱动;补触发逻辑 | | demo | 脚手架 | 仅作示例,不用于生产 |