10 KiB
10 KiB
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 developinstall:安装插件。--local=<zip>离线安装;--force在线强制覆盖。例:php think addon:manage demo -a install/php think addon:manage demo -a install --local=/path/addon.ziprefresh-menu:重导菜单(menu.json → admin_power / user_rule),不改安装 / 启用、不跑 SQL;插件名留空 = 刷新全部。例:php think addon:manage/php think addon:manage blog -a refresh-menureload:热重载(需app_debug)。--force强制;--status查看状态;插件名留空 = 全部。例:php think addon:manage myplugin -a reload --force/php think addon:manage -a reload --statushealth:健康检查(委托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:copyphp think install:copy --corephp 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,选项与行为不变。详见上文 §1addon: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:checklinksphp 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 当前注册表(去重后)
'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出现了两次(重复键),实际生效一份,建议清理重复项。