Files
2026-03-26 20:22:34 +08:00

87 lines
2.6 KiB
Markdown
Raw Permalink 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.

---
name: "ulthon-admin-menu-cli"
description: "解释并指导后台菜单system_menu与 admin:menu:* 命令的使用方式。需要导出菜单、通过命令行创建/更新/删除菜单、或排查菜单字段映射pid/href/auth_node时调用。"
---
# 菜单管理admin:menu:* CLI
## 何时调用
- 需要导出当前系统菜单数据,用于备份/迁移/对比。
- 需要在不进入后台页面的情况下,通过命令行创建/更新/删除菜单。
- 需要排查菜单字段映射:`pid`/`href`/`auth_node` 与命令参数 `parent-id`/`path`/`node` 的对应关系。
- 需要脚本化输出JSON对接自动化运维/测试(仅导出命令支持)。
## 命令清单
### 1) 导出菜单
```bash
php think admin:menu:export
```
常用参数:
- `--format=json`JSON 输出(含 count/exported_at
- `--output=<文件路径>`把导出的菜单数组写入文件JSON
示例:
```bash
php think admin:menu:export --format=json
php think admin:menu:export --output=runtime/agent/menu_export.json
php think admin:menu:export --output=runtime/agent/menu_export.json --format=json
```
### 2) 创建菜单(会写入数据库)
```bash
php think admin:menu:create --title="测试菜单" --path="demo.index/index" --icon="fa fa-list" --parent-id=0 --sort=100
```
### 3) 更新菜单(会写入数据库)
```bash
php think admin:menu:update --id=123 --title="新标题" --path="demo.index/index" --icon="fa fa-list" --parent-id=0 --sort=100
```
说明:
- `--id` 必填;其余参数不传则不更新该字段。
- `--path` 更新的是数据库字段 `href`
- `--parent-id` 更新的是数据库字段 `pid`
### 4) 删除菜单(会写入数据库,软删除)
```bash
php think admin:menu:delete --id=123
```
说明:
- 若存在子菜单会拒绝删除(需先删除子菜单)。
## 字段映射速查
- `--parent-id``system_menu.pid`
- `--path``system_menu.href`
- `--node``system_menu.auth_node`
## 典型工作流
### 工作流 A备份菜单到文件
```bash
php think admin:menu:export --output=runtime/agent/menu_export.json
```
### 工作流 B创建 → 更新 → 删除(用于验证命令链路)
```bash
php think admin:menu:create --title="CLI测试菜单" --path="test.cli/index" --parent-id=0
php think admin:menu:update --id=<上一步返回的id> --title="CLI测试菜单_改"
php think admin:menu:delete --id=<上一步返回的id>
```
## 注意事项
- `create/update/delete` 会实际修改数据库,建议在测试环境或确认无风险后执行。
- 导出默认过滤 `delete_time=0`(只导出未删除菜单)。