Files
YwxAppThink/docs/自定义命令清单.md
T

159 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# YwxApp 自定义命令清单
> 生成日期:2026-07-30
> 运行方式:在项目根目录执行 `php think <命令> [参数] [选项]`
> 命令注册入口:`ywxapp/service/AppService.php` 的 `boot()` 方法(`$this->commands([...])`
> 命令类扫描范围:`app/command`、`ywxapp/command`、`addon/*/command`
---
## 一、已注册命令(实际可用,共 14 个)
按功能分组列出。
### 1. 插件管理
#### `addon:manage <插件名> -a <action>`
- **文件**`ywxapp/command/addon/Manage.php`health 动作委托 `app/command/AddonHealth.php`
- **用途**:插件统一管理入口,合并原 `addon:develop` / `addon:install` / `addon:refresh-menu` / `addon:reload` / `addon:health` 五条命令为单入口。
- **参数**
- `<插件名>`(可选):部分动作需要;留空语义见各动作
- `-a, --action`(必填):`develop` | `install` | `refresh-menu` | `reload` | `health`
- **动作与选项**
- `develop`:开发者模式安装(源码已在 `addon/<name>`,原地建表 / 注入菜单 / 启用,免打包)。例:`php think addon:manage mqttbroker -a develop`
- `install`:安装插件。`--local=<zip>` 离线安装;`--force` 在线强制覆盖。例:`php think addon:manage demo -a install` / `php think addon:manage demo -a install --local=/path/addon.zip`
- `refresh-menu`:重导菜单(`menu.json → admin_power / user_rule`),不改安装 / 启用、不跑 SQL;插件名留空 = 刷新全部。例:`php think addon:manage` / `php think addon:manage blog -a refresh-menu`
- `reload`:热重载(需 `app_debug`)。`--force` 强制;`--status` 查看状态;插件名留空 = 全部。例:`php think addon:manage myplugin -a reload --force` / `php think addon:manage -a reload --status`
- `health`:健康检查(委托 `AddonHealth`)。`[插件名]` 可选;`--detail` 详情;`--fix` 修复;`--output=text|json|html``--send-alert``--webhook=<url>``--email=<addr>``--save-report`。例:`php think addon:manage -a health` / `php think addon:manage myplugin -a health --fix` / `php think addon:manage -a health --output=json --send-alert`
#### `ywxapp:upgrade`
- **文件**`ywxapp/command/Upgrade.php`
- **用途**:本地离线升级一键命令。绕过在线下载,直接对本地打包产物执行升级,复用系统既有升级逻辑:
- **框架**`FrameworkService::apply()` —— 备份、解压覆盖、跑 `upgrade.sql`、写回 `config/ywxapp.php` 版本号(自动备份到 `runtime/framework/backup/`)。
- **插件**`AddonService::localUpgrade()` —— 备份旧目录、解压覆盖(含 Zip Slip 防护与 static 资源处理)、增量 SQL、更新 `info.php` 版本(自动备份到 `runtime/addon/backup/`)。
- 区别于 `addon:manage -a install --local=`(首次安装,插件已存在会拒绝):本命令支持**覆盖已安装插件**的离线升级。
- **选项**
- `-f, --file=<zip>`(必填):升级包本地路径(绝对或相对项目根)
- `-t, --type=<type>`(必填):`framework` | `addon`
- `-r, --ver=<ver>`(可选):目标版本号。**framework 必填**(写入 `config/ywxapp.php`);addon 自动从 zip 内 `info.php` 读取
- `-p, --patch`:框架补丁包标记(核心包,解压时剥离 `ywxapp/` 前缀解到 `ywxapp/`;整站包**勿加**
- **示例**
- 框架整站包:`php think ywxapp:upgrade -f runtime/framework/ywxapp-1.0.9.zip -t framework -r 1.0.9`
- 框架核心补丁包:`php think ywxapp:upgrade -f runtime/framework/ywxapp-1.0.9.zip -t framework -r 1.0.9 -p`
- 插件升级:`php think ywxapp:upgrade -f runtime/market/forum-1.0.2.zip -t addon`
- **注意**:执行后会提示清理 `runtime/cache``runtime/temp`;插件升级前会自动备份到 `runtime/addon/backup/<name>-<ver>-<时间戳>/`,失败可回滚。
### 2. 数据库
#### `install:copy`
- **文件**`app/command/InstallCopy.php`
- **用途**:复制 / 初始化本项目数据库安装(核心表 + 插件表)。脚本只执行 `CREATE TABLE / INSERT`(白名单),对已存在的表 / 数据做幂等跳过。
- **选项**
- `-c, --core`:仅安装核心表
- `-a, --addon=<name>`:仅安装指定插件(逗号分隔),默认全部插件
- **示例**
- `php think install:copy`
- `php think install:copy --core`
- `php think install:copy --addon=blog,wxchat`
### 3. 服务进程(常驻 / 网关)
#### `workerman:gateway`
- **文件**`ywxapp/command/GatewayWorker.php`
- **用途**:启动 Workerman GatewayWorker 服务(Register / Gateway / BusinessWorker)。
- **选项**
- `-a, --acthon=<val>`:操作(start / stop / restart 等,透传给 Workerman
- **示例**`php think workerman:gateway -a start`
#### `wxchat:server`
- **文件**`addon/wxchat/command/ChatServer.php`
- **用途**:启动 wxchat 的 GatewayWorker 即时通讯服务。
- **选项**
- `-a, --action=<val>`:操作(如 start
- **示例**`php think wxchat:server -a start`
#### `mqttbroker:start`
- **文件**`addon/mqttbroker/command/MqttBroker.php`
- **用途**:启动 MQTT Broker 常驻进程(兼容 MQTT 3.1.1 / 5.0,类 EMQX 轻量 broker,零外部依赖;转发规则桥接 EMQX 需 `workerman/mqtt`,未安装时自动跳过)。
- **选项**
- `-p, --port=<val>`:监听端口(默认 `1883`
- `-H, --host=<val>`:监听地址(默认 `0.0.0.0`
- **示例**`php think mqttbroker:start` / `php think mqttbroker:start -p 1883`
### 4. 插件运维 / 监控
#### `addon:health` / `addon:reload` 已并入 `addon:manage`
-`addon:health``addon:reload` 现统一为 `addon:manage -a health` / `addon:manage -a reload`,选项与行为不变。详见上文 §1 `addon:manage`
#### `addon:license-check`
- **文件**`ywxapp/command/AddonLicenseCheck.php`
- **用途**:运行期授权巡检(Discuz 式:已启用付费插件定期复查授权,过期自动禁用)。遍历 `addon/` 下已启用且 `info['license']=true` 的付费插件,逐个向中心站 `validDomain` 校验,校验拒绝或(非 `offline_tolerant` 时)中心站不可达 → 落库 `status=0` 禁用并写 `Log::warning`。放行条件:调试+未知来源 / `config('ywxapp.addon_license_check')===false` / 非客户机(`!is_market_client()`)时直接跳过。
- **依赖**:仅客户机(`is_market_client()===true`)且 `addon_license_check` 开启时生效。
- **示例**
- `php think addon:license-check`
- crontab(建议每日 03:10 巡检一次):
```
10 3 * * * cd /path/to/site && php think addon:license-check >> runtime/license_check.log 2>&1
```
- 仅观察不禁用:临时设 `addon_license_check=offline_tolerant` 后运行,中心站不可达不禁用(仅真实过期拒绝仍禁用)。
### 5. 代码生成
#### `make:modely <name>`
- **文件**`ywxapp/command/ModelY.php`
- **用途**:创建一个新模型类(继承自 `think\console\command\Make`)。
- **参数**
- `name`(必填):模型类名,例如 `Yasd`
- **示例**`php think make:modely Yasd`
### 6. 第三方 / 业务集成
#### `mqttbroker:acltest`
- **文件**`addon/mqttbroker/command/TestAcl.php`
- **用途**:ACL 实网决策验证,用真实 DB 规则校验 `Auth::checkAcl` 的放行 / 拒绝逻辑(deny 拒绝、默认放行、用户定向拒绝、超管绕过、`$SYS` 只读)。不依赖运行中的 Broker。
- **示例**`php think mqttbroker:acltest`
#### `haonav:checklinks`
- **文件**`addon/haonav/command/CheckLinks.php`
- **用途**:haonav 网址导航死链巡检,更新 `status_code / last_check_at`。适合放 crontab。
- **选项**
- `--limit=<n>`:本次最多检测条数(`0`=全部,按最久未检测优先,默认 `0`
- `--timeout=<s>`:单条检测超时秒数(默认 `8`
- **示例**
- `php think haonav:checklinks`
- `php think haonav:checklinks --limit=50`
- crontab`0 3 * * * cd /path/to/site && php think haonav:checklinks >> runtime/haonav_check.log 2>&1`
---
## 二、已定义但未注册命令(共 4 个)
以下命令类已实现 `setName`,但**未写入 `config/console.php`**,因此 `php think list` 不会列出、直接执行会报「命令不存在」。如需启用,把对应键值加入 `config/console.php` 的 `commands` 数组即可(注意 `clear` 重名冲突问题)。
| 命令名 | 类 | 文件 | 说明 / 参数 |
|--------|-----|------|-------------|
| `addon:make` | `ywxapp\command\addon\Addon` | `ywxapp/command/addon/Addon.php` | **统一脚手架/生成器**(已通过 `AppService` 注册,替代原 `addon:build`/`addon:clear`/`addon:controller`/`addon:model`/`addon:middleware`/`addon:validate`/`addon:event`/`addon:listener`/`addon:service`/`addon:subscribe`)。用法 `php think addon:make <插件名> -a <action>``-a` 取 `build`/`clear`/`controller`/`model`/`middleware`/`validate`/`event`/`listener`/`service`/`subscribe`;生成器用 `--name=<类>``controller` 另支持 `--api`/`--plain``clear` 支持 `-c`/`-l`/`-r`。 |
| `app` | `ywxapp\command\AppCommand` | `ywxapp/command/AppCommand.php` | **应用命令统一入口**(已通过 `AppService` 注册)。聚合 `ywxapp/command/app/*` 全部命令:`build`/`clear`/`controller`/`model`/`event`/`listener`/`middleware`/`service`/`subscribe`/`validate`。用法 `php think app <子命令> [参数]`;如 `php think app controller app\index --api`、`php think app clear --cache`。子命令专有选项(`--api`/`--plain`/`--cache` 等)透传至原命令类,未内联、不另立独立命令名。 |
> 说明:`ywxapp/command/Create.php` 中的 `YMake` 是**抽象基类**`abstract class YMake extends Command`),本身不是可执行命令,供 `ModelY` 等生成类继承,不在清单内。
---
## 三、附:`config/console.php` 当前注册表(去重后)
```php
'commands' => [
"workerman:gateway" => \ywxapp\command\GatewayWorker::class,
"make:modely" => \ywxapp\command\ModelY::class,
"wxchat:server" => \addon\wxchat\command\ChatServer::class,
"install:copy" => \app\command\InstallCopy::class,
"mqttbroker:start" => \addon\mqttbroker\command\MqttBroker::class,
"mqttbroker:acltest" => \addon\mqttbroker\command\TestAcl::class,
"addon:manage" => \ywxapp\command\addon\Manage::class,
"addon:license-check" => \ywxapp\command\AddonLicenseCheck::class,
"haonav:checklinks" => \addon\haonav\command\CheckLinks::class,
]
```
> 注:原文件中 `install:copy` 出现了两次(重复键),实际生效一份,建议清理重复项。