Files
2026-10-11 19:06:33 +08:00

18 KiB
Raw Permalink Blame History

1.3 目录结构

目录说明

在软件开发过程中,优秀的软件目录结构对于项目的组织、开发、维护和扩展至关重要,合理的目录结构能够显著提升开发效率和代码可维护性。

1. 清晰的层次结构:按照功能模块划分目录,方便团队成员快速定位代码。
2. 分层架构:Controller(HTTP)、Service(业务)、Model(数据)分离,职责清晰。
3. Trait 组合复用:通用能力集中在 BaseService 与 6 个 Concerns Trait,子类只声明差异。
4. 提升开发效率:清晰的目录结构和模块划分,减少查找代码的时间,提高开发效率。

项目根目录

RXThinkCMF_Laravel13_AntdVue/
├── app/                          // 后端源码(见下方详解)
├── bootstrap/                    // 应用引导(app.php 注册中间件别名与健康检查路由)
├── config/                       // 配置文件(18 个)
├── database/
│   ├── migrations/               // 数据库迁移(本项目为空,建表以 SQL 脚本为准)
│   ├── seeders/                  // 种子数据(DatabaseSeeder:租户/部门/角色/菜单/用户/字典)
│   └── factories/                // 模型工厂(测试数据)
├── docker/                       // Docker 部署文件(Dockerfile / nginx.conf / .env.docker)
├── document/                     // 项目资料(五种数据库初始化脚本,按类型分组)
├── docs/                         // 专项文档(定时任务调度说明)
├── public/                       // Web 公开目录(入口 index.php、静态资源)
├── resources/
│   ├── templates/                // ★ 代码生成器模板(*.tpl + ui/ + ui2/)
│   ├── views/                    // Blade 视图(欢迎页等少量页面)
│   ├── css/  js/                 // Vite 资源入口(TailwindCSS)
├── routes/
│   ├── api.php                   // ★ 全部 API 路由(公开接口在中间件组外)
│   ├── console.php               // 命令调度注册
│   └── web.php                   // 欢迎页路由
├── storage/                      // 运行时产物(日志/缓存/会话/编译视图,需可写)
├── tests/                        // PHPUnit 测试(Feature / Unit)
├── ui/                           // ★ 前端 AntdVue 管理后台(Vue3 + AntDesign,见第 9 章)
├── uploads/                      // 上传文件目录
├── vendor/                       // Composer 依赖(不提交到版本控制)
├── artisan                       // Artisan 命令行入口
├── composer.json                 // PHP 依赖清单(含 setup / dev / test 脚本)
├── package.json                  // 后端资源构建依赖(Vite + TailwindCSS,前端依赖见 ui/package.json)
├── vite.config.js                // Vite 构建配置
├── docker-compose.yml            // Docker 容器编排
├── .env.example                  // 环境变量模板
├── .env                          // 环境变量(不提交到版本控制)
└── README.md                     // 项目说明

:::tip 前端代码位置 本仓库包含后端服务与 ui/ 目录内的前端 AntdVue 管理后台(Vue3 + AntDesign);代码生成器会把生成的前端页面输出到 ui/src/ 对应位置(见 10.6 自定义模板开发)。前端工程结构详见 第 9 章 前端开发。 :::

后端目录 (app/)

app/
├── Attributes/                   // PHP 8 注解
│   ├── Permission.php            //   权限校验注解(#[Permission('sys:user:add')])
│   ├── OperationLog.php          //   操作日志注解(类型 + 模板,40 种操作类型)
│   └── DemoAllow.php             //   演示环境放行注解
├── Console/Commands/             // 5 个 Artisan 命令
│   ├── GeneratorCommand.php      //   generate:code 代码生成器 CLI
│   ├── DbMigrateCommand.php      //   db:migrate 跨库数据迁移
│   ├── JobRunCommand.php         //   job:run 定时任务一次性执行(配合系统 cron)
│   ├── JobDaemonCommand.php      //   job:daemon 定时任务常驻进程(配合 supervisor)
│   └── ClearDictCache.php        //   dict:clear-cache 清除字典缓存
├── Exceptions/                   // 统一异常处理
│   ├── BizException.php          //   业务异常(Service 层抛出,默认 code=1)
│   └── Handler.php               //   全局异常渲染(异常 → 统一 JSON)
├── Helpers/helpers.php           // 21 个全局辅助函数(composer autoload.files 加载)
├── Http/
│   ├── Controllers/
│   │   ├── Controller.php        //   控制器基类(统一响应 + _page/_add 等通用 CRUD)
│   │   └── Api/                  //   28 个业务控制器
│   │       ├── AuthController.php        //   登录认证(JWT 双令牌 / OAuth2)
│   │       ├── UserController.php        //   用户管理
│   │       ├── RoleController.php        //   角色管理
│   │       ├── MenuController.php        //   菜单管理
│   │       ├── ExampleController.php     //   案例演示(标准 CRUD 参考模板)
│   │       ├── GeneratorController.php   //   代码生成器
│   │       └── ...                       //   其他模块
│   ├── Middleware/                //   7 个中间件
│   │   ├── ProxyMiddleware.php   //     真实 IP 提取(受信代理)
│   │   ├── Cors.php              //     跨域处理
│   │   ├── ForceJsonResponse.php //     强制 JSON 响应
│   │   ├── Authenticate.php      //     JWT 认证 + #[Permission] 鉴权(auth.jwt)
│   │   ├── ResolveTenant.php     //     租户上下文解析(tenant)
│   │   ├── LogOperation.php      //     操作日志采集(log.operation,terminable 落库)
│   │   └── DemoMiddleware.php    //     演示模式写操作拦截
│   └── Requests/                 //   24 个 FormRequest(统一继承 BaseRequest)
│       ├── BaseRequest.php       //     基类:授权放行 + 失败统一 JSON
│       ├── ExampleRequest.php    //     示例请求验证
│       └── ...                   //     其他模块请求验证
├── Models/                        // Eloquent 模型(25 个)
│   ├── Concerns/                  //   3 个模型 Trait
│   │   ├── SoftDeletesByFlag.php  //     is_delete 软删除
│   │   ├── SoftDeleteFlagScope.php//     全局软删除范围
│   │   └── HasAuditColumns.php    //     审计字段自动填充
│   ├── User.php                   //   用户模型($table = 'user',前缀由 DB_PREFIX 决定)
│   ├── Example.php                //   案例模型
│   └── ...                        //   其他模型
├── Observers/                     // 模型观察者(数据变更 → 缓存失效)
│   ├── DictItemObserver.php       //   字典项变更 → 清除字典缓存
│   ├── MenuObserver.php           //   菜单变更 → 清除菜单/权限缓存
│   └── RoleMenuObserver.php       //   角色菜单变更 → 清除角色权限缓存
├── Providers/
│   └── AppServiceProvider.php     // 启动校验(JWT_SECRET fail-close)+ Observer 注册
├── Services/                      // ★ 业务逻辑层(36 个)
│   ├── BaseService.php            //   核心基类(全部声明式属性集中于此)
│   ├── BaseTenantService.php      //   租户版基类(tenant_id 查询/写入双隔离)
│   ├── Concerns/                  //   7 个 Service Trait(只放方法)
│   │   ├── HasCrudOperations.php  //     add/update/delete + 生命周期钩子 + 事务
│   │   ├── HasQueryScopes.php     //     buildQuery / 排序白名单
│   │   ├── HasFileProcessing.php  //     文件字段自动处理(临时→正式、域名补全)
│   │   ├── HasDataScope.php       //     数据权限 + 租户隔离
│   │   ├── HasSerializeMaps.php   //     字典翻译(DictCacheService 批量优化)
│   │   ├── HasUniqueCheck.php     //     唯一性校验
│   │   └── HasConfigValueProcessing.php //  配置项 value 按类型处理(文件迁移 / valueList)
│   ├── ExampleService.php         //   案例演示服务(标准 CRUD 参考模板)
│   ├── JwtService.php             //   JWT 签发 / 刷新 / 解析
│   ├── DictCacheService.php       //   字典服务(两级缓存)
│   ├── GeneratorService.php       //   代码生成服务
│   ├── ExcelService.php           //   Excel 导入导出
│   ├── DbMigrateService.php       //   跨数据库数据迁移
│   └── ...                        //   其他业务/横切服务
├── Support/                       // 基础支撑
│   ├── Auth.php                   //   当前登录用户(Auth::userId() 等)
│   └── Result.php                 //   统一响应类(success/page/fail/...)
└── Task/                          // 定时任务处理器
    ├── BaseTask.php               //   任务基类
    ├── HelloWorldTask.php         //   测试任务(验证 daemon 调度)
    └── SendSmsTask.php            //   示例任务

后端模块内部结构

每个业务模块遵循统一的文件结构:

app/Http/Controllers/Api/{Name}Controller.php   // HTTP 入口(注解 + 调用快捷方法)
app/Http/Requests/{Name}Request.php            // 参数格式验证(FormRequest)
app/Services/{Name}Service.php                 // 业务逻辑(属性配置 + 钩子)
app/Models/{Name}.php                          // 数据模型(表映射 + 关联)
文件 职责 基类
Controller 接收请求、调用 Service、返回统一响应 App\Http\Controllers\Controller
Request 参数格式验证(必填、类型、格式) BaseRequest
Service 业务逻辑、属性声明、生命周期钩子 BaseService / BaseTenantService
Model 数据库表映射、关联关系、软删除、审计字段 Eloquent Model + Concerns Trait

配置目录 (config/)

config/
├── api.php                       // API 配置(驼峰/下划线自动转换开关)★ 独立配置
├── captcha.php                   // 验证码配置(长度/字符集/有效期/万能码)★ 独立配置
├── cors.php                      // 跨域配置(允许来源/方法/头)★ 独立配置
├── file.php                      // 文件上传配置(目录/域名/大小/后缀白名单)★ 独立配置
├── jwt.php                       // JWT 配置(密钥/有效期/签发者)★ 独立配置
├── middleware.php                // 中间件配置(受信代理等)★ 独立配置
├── tenant.php                    // 多租户配置(默认租户 ID)★ 独立配置
├── generator.php                 // 代码生成器配置(父菜单 ID、应用名)
├── app.php                       // 应用配置(名称/时区/调试模式)
├── auth.php                      // 认证配置
├── cache.php                     // 缓存配置(redis 驱动)
├── database.php                  // 数据库配置(mysql/pgsql/sqlsrv/sqlite + redis)
├── filesystems.php               // 文件系统配置
├── logging.php                   // 日志配置
├── mail.php                      // 邮件配置
├── queue.php                     // 队列配置
├── services.php                  // 第三方服务配置
└── session.php                   // 会话配置

:::tip 独立配置约定 标 ★ 的 7 个配置文件为本项目独立维护(不与 Laravel 默认配置合并),通过 config('jwt.secret')、config('file.domain_url') 等方式读取。完整配置项见 附录 C 配置项速查。 :::

数据库目录 (database/)

database/
├── migrations/                   // 迁移目录(本项目为空,建表以 SQL 导出为准)
├── seeders/
│   └── DatabaseSeeder.php        // 初始数据:租户、部门、角色、菜单、用户、字典
└── factories/                    // 模型工厂

:::warning 注意 本项目未使用 Laravel 迁移建表,数据库结构以 document/<数据库类型>/rxthinkcmf.laravel13.antdvue.sql 脚本为准(25 张业务表,laravel_ 前缀,五种数据库各有专用脚本)。composer setup 中的 migrate --force 仅初始化迁移记录表,不会创建业务表。详见 2.5 数据库初始化。 :::

代码生成模板 (resources/templates/)

resources/templates/
├── controller.php.tpl            // 控制器模板
├── service.php.tpl               // 服务层模板
├── model.php.tpl                 // 模型模板
├── request.php.tpl               // FormRequest 模板
├── ui/                           // 普通列表模板(前端文件)
│   ├── index.vue.tpl             //   列表页模板
│   ├── edit.vue.tpl              //   编辑弹窗模板
│   ├── detail.vue.tpl            //   详情弹窗模板
│   ├── api.ts.tpl                //   API 接口模板
│   ├── columns.ts.tpl            //   表格列定义模板
│   └── querySchemas.ts.tpl       //   查询条件模板
└── ui2/                          // 树形结构模板(前端文件)

路由目录 (routes/)

routes/
├── api.php                       // ★ 全部 API 路由(约 165 条)
│                                 //   公开接口(login/captcha/refresh/oauth2)在中间件组外
│                                 //   认证接口在 ['auth.jwt','tenant','log.operation'] 组内
├── console.php                   // Artisan 调度注册
└── web.php                       // 欢迎页路由(/up 健康检查由 bootstrap/app.php 注册)

Docker 目录 (docker/)

docker-compose.yml                // 四容器编排(Nginx + PHP-FPM + MySQL + Redis)
docker/
├── Dockerfile                    // PHP 8.3-fpm 应用镜像(扩展 + Composer 依赖)
├── nginx.conf                    // Nginx 站点配置(Laravel 路由重写 + 安全规则)
└── .env.docker                   // 容器环境变量(密码、端口、JWT 密钥)

资料目录 (document/)

document/
├── .gitignore                        // 忽略规则(脚本等大文件不进版本库)
├── mysql/
│   └── rxthinkcmf.laravel13.antdvue.sql    // ★ MySQL 初始化脚本(约 226MB,25 张业务表 + 初始数据)
├── postgresql/
│   └── rxthinkcmf.laravel13.antdvue.sql    // PostgreSQL 初始化脚本
├── sqlserver/
│   └── rxthinkcmf.laravel13.antdvue.sql    // SQL Server 初始化脚本
├── oracle/
│   └── rxthinkcmf.laravel13.antdvue.sql    // Oracle 初始化脚本
└── sqlite/
    └── rxthinkcmf.laravel13.antdvue.sql    // SQLite 初始化脚本

:::tip 五种数据库脚本按类型分组,已做对应 SQL 语法适配,直接导入即可(见 2.5 数据库初始化)。Docker 首次启动自动导入 document/mysql/ 下的脚本。 :::

关键配置文件

文件 作用
.env 数据库连接、JWT 密钥、Redis 密码、文件上传等环境变量
config/database.php 数据库配置(4 种关系库 + Redis 连接)
config/jwt.php JWT 配置(密钥 / access·refresh 有效期 / 签发者)
config/file.php 文件上传配置(目录 / 域名 / 大小 / 后缀白名单)
config/cors.php 跨域配置(允许来源 / 方法 / 头)
config/app.php 应用配置(名称 / 时区 / 调试模式、受信代理 trusted_proxies)
config/api.php 响应驼峰/下划线自动转换开关
config/tenant.php 多租户配置(默认租户 ID)
config/generator.php 代码生成器配置(父菜单 ID、应用名)
composer.json 依赖清单 + setup / dev / test 脚本
bootstrap/app.php 中间件别名注册、全局中间件组、/up 健康检查

:::tip 注意事项

  • 保持一致性:目录结构一旦确定,应保持一致性,避免随意更改。
  • 合理划分模块:根据项目的实际需求,合理划分功能模块,避免过度模块化。
  • 文档记录:在项目文档中详细说明目录结构和各模块的功能,便于新成员快速上手。
  • 版本控制:使用 Git 等版本控制工具,并在 .gitignore 文件中配置不需要跟踪的目录和文件(vendor/、storage/、.env 等)。 :::

总结

软件架构的目录结构是项目开发和维护的基础,直接影响到项目的可维护性、可扩展性和开发效率。本项目采用分层的目录结构(后端 Controller → Service → Model,Trait 组合复用横切能力),结合模块化管理,是一个有效的解决方案。通过合理规划和遵循最佳实践,可以确保项目的结构清晰、功能明确,为团队开发和长期维护打下坚实的基础。