📁 目录结构
ThinkAdmin 当前聚合仓库采用应用目录、配置目录、公共入口、插件目录和运行目录分层组织。后台与微信等模块由 Composer 插件复制或映射到应用命名空间。
需要先区分两个视角:ThinkAdminDeveloper 是开发聚合仓库,根 composer.json 使用 repositories.type=path 指向 plugin/*,方便统一开发、测试和发布;普通项目通过 Composer 安装发布后的独立包,插件源码通常位于 vendor,再由安装器发布到 app、public、database/migrations 等目录。
🚀 主要特点
- 多应用支持: 支持多个独立的应用目录
- 插件扩展: 支持插件开发和集成
- 自动加载: 支持多种文件的自动加载
- 模块化设计: 采用模块化的目录设计
- 开发友好: 提供友好的开发环境
- 灵活配置: 支持灵活的配置管理
📋 目录说明
🧩 开发总库与发布包
- 开发聚合仓库:
plugin/*是各 Composer 包的源码目录,根项目通过 path 仓库把这些包连到一起,用于统一开发和联调。 - 发布安装项目: 用户项目不需要保留
plugin/*源码目录,通常通过composer require zoujingli/...安装到vendor。 - 发布产物目录:
app/admin、app/wechat、public/static、database/migrations等可能由插件安装器复制生成,属于受插件托管的项目文件。 - 自定义边界: 通用修复应回到对应插件源码包;项目级定制优先放在可保留入口,例如
public/static/extra、自定义应用目录或本地化插件。
📱 应用目录
- app: 应用基础目录,包含所有应用模块
- admin: 后台应用目录,由
think-plugs-admin的src复制到app/admincontroller/: 控制器目录,包含所有后台管理控制器model/: 数据模型目录,包含系统数据模型view/: 视图模板目录,包含后台页面模板lang/: 语言包目录,包含多语言文件route/: 路由配置目录Service.php: 服务注册文件,用于注册插件菜单等
- index: 默认应用入口,用于前端访问
- wechat: 微信应用目录,由
think-plugs-wechat的src复制到app/wechatcontroller/: 微信相关控制器model/: 微信数据模型service/: 微信服务类command/: 微信命令行工具Service.php: 微信服务注册文件
⚙️ 配置目录
- config: 全局配置目录
app.php: 应用配置(运行模式、时区等)database.php: 数据库连接配置cache.php: 缓存配置route.php: 路由配置lang.php: 多语言配置log.php: 日志配置view.php: 视图配置cookie.php: Cookie 配置phinx.php: 数据库迁移配置
📁 资源目录
- public: 公共资源目录,Web 服务器根目录
- static: 静态资源目录
extra/: 自定义扩展目录(不会被插件更新覆盖)plugs/: 后台应用插件目录theme/: 后台应用主题目录
- upload: 上传文件存储目录
- index.php: 网站访问入口文件
⚙️ 开发指南
📱 应用开发
- 创建应用: 在
app目录下创建子应用目录 - 应用示例: 如
app/api、app/data、app/user、app/shop等 - 独立开发: 每个应用可以独立开发和维护
🔌 插件开发
- 插件文档: 阅读 插件开发文档
- 插件目录: Composer 正常安装时位于
vendor,当前开发聚合仓库通过repositories.type=path指向plugin/*本地目录 - 服务注册: 通过 Service 类进行服务注册
📦 文件加载
- 全局文件:
think\admin\Library::register()会扫描并加载app目录两层内的sys.php - 应用文件: 当前应用解析完成后会加载应用级配置、事件、中间件和公共函数文件
- 插件服务: 通过 Composer
extra.think.services加载插件服务类
🔧 自动加载支持
🌐 全局文件
- sys.php: 全局系统文件,可用于注册命令、路由或启动回调等
- 位置:
app/sys.php或各应用目录下的sys.php - 加载方式:ThinkAdmin 启动时扫描
app目录两层内的sys.php
- 位置:
- 配置文件:
config/目录由 ThinkPHP 加载;应用级配置在当前应用解析后加载
📱 应用文件
每个应用目录下可以包含以下自动加载文件:
- config/-.php: 应用配置文件(如
config/app.php) - lang/-.php: 应用语言包(如
app/admin/lang/zh-cn.php)- ThinkAdmin 权限中间件还会按当前语言加载
think-library/src/lang/和项目根lang/下的全局语言包
- ThinkAdmin 权限中间件还会按当前语言加载
- event.php: 事件配置文件,用于注册事件监听器
- common.php: 公共函数文件,定义应用级公共函数
- provider.php: 服务提供者文件,注册服务容器
- middleware.php: 中间件配置文件,定义应用中间件
🔌 插件文件
- Service.php: 插件服务注册文件
- 位置:通常为插件
src/Service.php或应用Service.php - 用途:注册插件菜单、记录插件信息、注册服务或事件等
- 加载方式:需要在插件
composer.json的extra.think.services中声明
- 位置:通常为插件
- 数据库迁移: 插件
stc/database/目录下的迁移文件会自动复制到database/migrations/ - 静态资源: 插件
stc/public/目录下的文件会自动复制到public/目录
.
├─ app 应用基础目录
│ ├─ admin 后台应用目录( 不建议修改,可使用插件更新 )
│ │ ├─ controller 应用控制器目录
│ │ │ ├─ api API 接口控制器
│ │ │ ├─ Index.php 后台首页控制器
│ │ │ ├─ Login.php 登录控制器
│ │ │ ├─ User.php 用户管理控制器
│ │ │ ├─ Menu.php 菜单管理控制器
│ │ │ ├─ Auth.php 权限管理控制器
│ │ │ ├─ Config.php 系统配置控制器
│ │ │ ├─ Queue.php 任务管理控制器
│ │ │ ├─ File.php 文件管理控制器
│ │ │ ├─ Oplog.php 操作日志控制器
│ │ │ └─ Base.php 数据字典控制器
│ │ ├─ lang 应用语言包目录
│ │ ├─ route 应用路由配置
│ │ ├─ view 应用视图目录
│ │ └─ Service.php 服务注册文件
│ ├─ index 默认应用入口
│ │ └─ controller 控制器目录
│ └─ wechat 微信应用目录( 不建议修改,可使用插件更新 )
│ ├─ command 应用指令目录
│ ├─ controller 应用控制器目录
│ ├─ model 数据模型目录
│ ├─ service 应用服务目录
│ ├─ lang 应用语言包目录
│ ├─ view 应用视图目录
│ └─ Service.php 服务注册文件
├─ config 全局配置目录
│ ├─ app.php 全局应用配置
│ ├─ cache.php 全局缓存配置
│ ├─ cookie.php 全局 Cookie 配置
│ ├─ database.php 数据库连接配置
│ ├─ phinx.php 数据库迁移配置
│ ├─ lang.php 系统多语言配置
│ ├─ log.php 全局日志配置
│ ├─ route.php 路由和URL配置
│ └─ view.php 视图模板配置
├─ public 网站开放目录
│ ├─ static 静态资源目录
│ │ ├─ extra 自定义扩展目录
│ │ ├─ plugs 后台应用插件( 不建议修改,可使用插件更新 )
│ │ └─ theme 后台应用主题( 不建议修改,可使用插件更新 )
│ ├─ upload 上传存储目录
│ ├─ index.php 网站访问入口( 不建议修改,可使用插件更新 )
│ ├─ router.php 网站测试入口( 不建议修改,可使用插件更新 )
├─ runtime 运行环境目录,需要可写权限
│ ├─ admin 系统应用运行目录
│ ├─ cache 系统默认缓存目录
│ ├─ log 系统运行日志目录
│ ├─ session Session 会话缓存
│ └─ wechat 微信运行目录缓存
├─ safefile 安全文件上传目录,需要读写权限
└─ vendor Composer 安装的第三方类库目录