Files
2026-10-25 18:52:36 +08:00

170 lines
30 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
import{_ as a,o as n,c as p,a2 as e}from"./chunks/framework.B-QBKwc1.js";const u=JSON.parse('{"title":"目录结构","description":"本页说明项目前后端目录组织与各目录职责,二次开发定位文件或了解工程结构时对照查阅。","frontmatter":{},"headers":[],"relativePath":"zh/directory.md","filePath":"zh/directory.md"}'),l={name:"zh/directory.md"};function t(i,s,c,o,r,d){return n(),p("div",null,[...s[0]||(s[0]=[e(`<h1 id="_1-3-目录结构" tabindex="-1">1.3 目录结构 <a class="header-anchor" href="#_1-3-目录结构" aria-label="Permalink to &quot;1.3 目录结构&quot;">​</a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>本页说明项目前后端目录组织与各目录职责,二次开发定位文件或了解工程结构时对照查阅。</p></div><h2 id="目录说明" tabindex="-1">目录说明 <a class="header-anchor" href="#目录说明" aria-label="Permalink to &quot;目录说明&quot;">​</a></h2><p>在软件开发过程中,优秀的软件目录结构对于项目的组织、开发、维护和扩展至关重要,合理的目录结构能够显著提升开发效率和代码可维护性。</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>1. 清晰的层次结构:按照功能模块划分目录,方便团队成员快速定位代码。</span></span>
<span class="line"><span>2. 分层架构:Controller(HTTP)、Service(业务)、Model(数据)分离,职责清晰。</span></span>
<span class="line"><span>3. Trait 组合复用:通用能力集中在 BaseService 与 6 个 Concerns Trait,子类只声明差异。</span></span>
<span class="line"><span>4. 提升开发效率:清晰的目录结构和模块划分,减少查找代码的时间,提高开发效率。</span></span></code></pre></div><h2 id="项目根目录" tabindex="-1">项目根目录 <a class="header-anchor" href="#项目根目录" aria-label="Permalink to &quot;项目根目录&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>RXThinkCMF_Laravel13_EleVue/</span></span>
<span class="line"><span>├── app/ // 后端源码(见下方详解)</span></span>
<span class="line"><span>├── bootstrap/ // 应用引导(app.php 注册中间件别名与健康检查路由)</span></span>
<span class="line"><span>├── config/ // 配置文件(18 个)</span></span>
<span class="line"><span>├── database/</span></span>
<span class="line"><span>│ ├── migrations/ // 数据库迁移(本项目为空,建表以 SQL 脚本为准)</span></span>
<span class="line"><span>│ ├── seeders/ // 种子数据(DatabaseSeeder:租户/部门/角色/菜单/用户/字典)</span></span>
<span class="line"><span>│ └── factories/ // 模型工厂(测试数据)</span></span>
<span class="line"><span>├── docker/ // Docker 部署文件(Dockerfile / nginx.conf / .env.docker)</span></span>
<span class="line"><span>├── document/ // 项目资料(五种数据库初始化脚本,按类型分组)</span></span>
<span class="line"><span>├── docs/ // 专项文档(定时任务调度说明)</span></span>
<span class="line"><span>├── public/ // Web 公开目录(入口 index.php、静态资源)</span></span>
<span class="line"><span>├── resources/</span></span>
<span class="line"><span>│ ├── templates/ // ★ 代码生成器模板(*.tpl + ui/ + ui2/)</span></span>
<span class="line"><span>│ ├── views/ // Blade 视图(欢迎页等少量页面)</span></span>
<span class="line"><span>│ ├── css/ js/ // Vite 资源入口(TailwindCSS)</span></span>
<span class="line"><span>├── routes/</span></span>
<span class="line"><span>│ ├── api.php // ★ 全部 API 路由(公开接口在中间件组外)</span></span>
<span class="line"><span>│ ├── console.php // 命令调度注册</span></span>
<span class="line"><span>│ └── web.php // 欢迎页路由</span></span>
<span class="line"><span>├── storage/ // 运行时产物(日志/缓存/会话/编译视图,需可写)</span></span>
<span class="line"><span>├── tests/ // PHPUnit 测试(Feature / Unit)</span></span>
<span class="line"><span>├── ui/ // ★ 前端 EleVue 管理后台(Vue3 + ElementPlus,见第 9 章)</span></span>
<span class="line"><span>├── uploads/ // 上传文件目录</span></span>
<span class="line"><span>├── vendor/ // Composer 依赖(不提交到版本控制)</span></span>
<span class="line"><span>├── artisan // Artisan 命令行入口</span></span>
<span class="line"><span>├── composer.json // PHP 依赖清单(含 setup / dev / test 脚本)</span></span>
<span class="line"><span>├── package.json // 后端资源构建依赖(Vite + TailwindCSS,前端依赖见 ui/package.json)</span></span>
<span class="line"><span>├── vite.config.js // Vite 构建配置</span></span>
<span class="line"><span>├── docker-compose.yml // Docker 容器编排</span></span>
<span class="line"><span>├── .env.example // 环境变量模板</span></span>
<span class="line"><span>├── .env // 环境变量(不提交到版本控制)</span></span>
<span class="line"><span>└── README.md // 项目说明</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">前端代码位置</p><p>本仓库包含<strong>后端服务</strong>与 <code>ui/</code> 目录内的前端 EleVue 管理后台(Vue3 + ElementPlus);代码生成器会把生成的前端页面输出到 <code>ui/src/</code> 对应位置(见 <a href="/zh/generator/templates.html">10.6 自定义模板开发</a>)。前端工程结构详见 <a href="/zh/frontend/overview.html">第 9 章 前端开发</a>。</p></div><h2 id="后端目录-app-" tabindex="-1">后端目录 (app/) <a class="header-anchor" href="#后端目录-app-" aria-label="Permalink to &quot;后端目录 (app/)&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>app/</span></span>
<span class="line"><span>├── Attributes/ // PHP 8 注解</span></span>
<span class="line"><span>│ ├── Permission.php // 权限校验注解(#[Permission(&#39;sys:user:add&#39;)])</span></span>
<span class="line"><span>│ ├── OperationLog.php // 操作日志注解(类型 + 模板,40 种操作类型)</span></span>
<span class="line"><span>│ └── DemoAllow.php // 演示环境放行注解</span></span>
<span class="line"><span>├── Console/Commands/ // 5 个 Artisan 命令</span></span>
<span class="line"><span>│ ├── GeneratorCommand.php // generate:code 代码生成器 CLI</span></span>
<span class="line"><span>│ ├── DbMigrateCommand.php // db:migrate 跨库数据迁移</span></span>
<span class="line"><span>│ ├── JobRunCommand.php // job:run 定时任务一次性执行(配合系统 cron)</span></span>
<span class="line"><span>│ ├── JobDaemonCommand.php // job:daemon 定时任务常驻进程(配合 supervisor)</span></span>
<span class="line"><span>│ └── ClearDictCache.php // dict:clear-cache 清除字典缓存</span></span>
<span class="line"><span>├── Exceptions/ // 统一异常处理</span></span>
<span class="line"><span>│ ├── BizException.php // 业务异常(Service 层抛出,默认 code=1)</span></span>
<span class="line"><span>│ └── Handler.php // 全局异常渲染(异常 → 统一 JSON)</span></span>
<span class="line"><span>├── Helpers/helpers.php // 21 个全局辅助函数(composer autoload.files 加载)</span></span>
<span class="line"><span>├── Http/</span></span>
<span class="line"><span>│ ├── Controllers/</span></span>
<span class="line"><span>│ │ ├── Controller.php // 控制器基类(统一响应 + _page/_add 等通用 CRUD)</span></span>
<span class="line"><span>│ │ └── Api/ // 28 个业务控制器</span></span>
<span class="line"><span>│ │ ├── AuthController.php // 登录认证(JWT 双令牌 / OAuth2)</span></span>
<span class="line"><span>│ │ ├── UserController.php // 用户管理</span></span>
<span class="line"><span>│ │ ├── RoleController.php // 角色管理</span></span>
<span class="line"><span>│ │ ├── MenuController.php // 菜单管理</span></span>
<span class="line"><span>│ │ ├── ExampleController.php // 案例演示(标准 CRUD 参考模板)</span></span>
<span class="line"><span>│ │ ├── GeneratorController.php // 代码生成器</span></span>
<span class="line"><span>│ │ └── ... // 其他模块</span></span>
<span class="line"><span>│ ├── Middleware/ // 7 个中间件</span></span>
<span class="line"><span>│ │ ├── ProxyMiddleware.php // 真实 IP 提取(受信代理)</span></span>
<span class="line"><span>│ │ ├── Cors.php // 跨域处理</span></span>
<span class="line"><span>│ │ ├── ForceJsonResponse.php // 强制 JSON 响应</span></span>
<span class="line"><span>│ │ ├── Authenticate.php // JWT 认证 + #[Permission] 鉴权(auth.jwt)</span></span>
<span class="line"><span>│ │ ├── ResolveTenant.php // 租户上下文解析(tenant)</span></span>
<span class="line"><span>│ │ ├── LogOperation.php // 操作日志采集(log.operation,terminable 落库)</span></span>
<span class="line"><span>│ │ └── DemoMiddleware.php // 演示模式写操作拦截</span></span>
<span class="line"><span>│ └── Requests/ // 24 个 FormRequest(统一继承 BaseRequest)</span></span>
<span class="line"><span>│ ├── BaseRequest.php // 基类:授权放行 + 失败统一 JSON</span></span>
<span class="line"><span>│ ├── ExampleRequest.php // 示例请求验证</span></span>
<span class="line"><span>│ └── ... // 其他模块请求验证</span></span>
<span class="line"><span>├── Models/ // Eloquent 模型(25 个)</span></span>
<span class="line"><span>│ ├── Concerns/ // 3 个模型 Trait</span></span>
<span class="line"><span>│ │ ├── SoftDeletesByFlag.php // is_delete 软删除</span></span>
<span class="line"><span>│ │ ├── SoftDeleteFlagScope.php// 全局软删除范围</span></span>
<span class="line"><span>│ │ └── HasAuditColumns.php // 审计字段自动填充</span></span>
<span class="line"><span>│ ├── User.php // 用户模型($table = &#39;user&#39;,前缀由 DB_PREFIX 决定)</span></span>
<span class="line"><span>│ ├── Example.php // 案例模型</span></span>
<span class="line"><span>│ └── ... // 其他模型</span></span>
<span class="line"><span>├── Observers/ // 模型观察者(数据变更 → 缓存失效)</span></span>
<span class="line"><span>│ ├── DictItemObserver.php // 字典项变更 → 清除字典缓存</span></span>
<span class="line"><span>│ ├── MenuObserver.php // 菜单变更 → 清除菜单/权限缓存</span></span>
<span class="line"><span>│ └── RoleMenuObserver.php // 角色菜单变更 → 清除角色权限缓存</span></span>
<span class="line"><span>├── Providers/</span></span>
<span class="line"><span>│ └── AppServiceProvider.php // 启动校验(JWT_SECRET fail-close)+ Observer 注册</span></span>
<span class="line"><span>├── Services/ // ★ 业务逻辑层(36 个)</span></span>
<span class="line"><span>│ ├── BaseService.php // 核心基类(全部声明式属性集中于此)</span></span>
<span class="line"><span>│ ├── BaseTenantService.php // 租户版基类(tenant_id 查询/写入双隔离)</span></span>
<span class="line"><span>│ ├── Concerns/ // 7 个 Service Trait(只放方法)</span></span>
<span class="line"><span>│ │ ├── HasCrudOperations.php // add/update/delete + 生命周期钩子 + 事务</span></span>
<span class="line"><span>│ │ ├── HasQueryScopes.php // buildQuery / 排序白名单</span></span>
<span class="line"><span>│ │ ├── HasFileProcessing.php // 文件字段自动处理(临时→正式、域名补全)</span></span>
<span class="line"><span>│ │ ├── HasDataScope.php // 数据权限 + 租户隔离</span></span>
<span class="line"><span>│ │ ├── HasSerializeMaps.php // 字典翻译(DictCacheService 批量优化)</span></span>
<span class="line"><span>│ │ ├── HasUniqueCheck.php // 唯一性校验</span></span>
<span class="line"><span>│ │ └── HasConfigValueProcessing.php // 配置项 value 按类型处理(文件迁移 / valueList)</span></span>
<span class="line"><span>│ ├── ExampleService.php // 案例演示服务(标准 CRUD 参考模板)</span></span>
<span class="line"><span>│ ├── JwtService.php // JWT 签发 / 刷新 / 解析</span></span>
<span class="line"><span>│ ├── DictCacheService.php // 字典服务(两级缓存)</span></span>
<span class="line"><span>│ ├── GeneratorService.php // 代码生成服务</span></span>
<span class="line"><span>│ ├── ExcelService.php // Excel 导入导出</span></span>
<span class="line"><span>│ ├── DbMigrateService.php // 跨数据库数据迁移</span></span>
<span class="line"><span>│ └── ... // 其他业务/横切服务</span></span>
<span class="line"><span>├── Support/ // 基础支撑</span></span>
<span class="line"><span>│ ├── Auth.php // 当前登录用户(Auth::userId() 等)</span></span>
<span class="line"><span>│ └── Result.php // 统一响应类(success/page/fail/...)</span></span>
<span class="line"><span>└── Task/ // 定时任务处理器</span></span>
<span class="line"><span> ├── BaseTask.php // 任务基类</span></span>
<span class="line"><span> ├── HelloWorldTask.php // 测试任务(验证 daemon 调度)</span></span>
<span class="line"><span> └── SendSmsTask.php // 示例任务</span></span></code></pre></div><h2 id="后端模块内部结构" tabindex="-1">后端模块内部结构 <a class="header-anchor" href="#后端模块内部结构" aria-label="Permalink to &quot;后端模块内部结构&quot;">​</a></h2><p>每个业务模块遵循统一的文件结构:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>app/Http/Controllers/Api/{Name}Controller.php // HTTP 入口(注解 + 调用快捷方法)</span></span>
<span class="line"><span>app/Http/Requests/{Name}Request.php // 参数格式验证(FormRequest)</span></span>
<span class="line"><span>app/Services/{Name}Service.php // 业务逻辑(属性配置 + 钩子)</span></span>
<span class="line"><span>app/Models/{Name}.php // 数据模型(表映射 + 关联)</span></span></code></pre></div><table tabindex="0"><thead><tr><th>文件</th><th>职责</th><th>基类</th></tr></thead><tbody><tr><td>Controller</td><td>接收请求、调用 Service、返回统一响应</td><td><code>App\\Http\\Controllers\\Controller</code></td></tr><tr><td>Request</td><td>参数格式验证(必填、类型、格式)</td><td><code>BaseRequest</code></td></tr><tr><td>Service</td><td>业务逻辑、属性声明、生命周期钩子</td><td><code>BaseService</code> / <code>BaseTenantService</code></td></tr><tr><td>Model</td><td>数据库表映射、关联关系、软删除、审计字段</td><td>Eloquent Model + Concerns Trait</td></tr></tbody></table><h2 id="配置目录-config-" tabindex="-1">配置目录 (config/) <a class="header-anchor" href="#配置目录-config-" aria-label="Permalink to &quot;配置目录 (config/)&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>config/</span></span>
<span class="line"><span>├── api.php // API 配置(驼峰/下划线自动转换开关)★ 独立配置</span></span>
<span class="line"><span>├── captcha.php // 验证码配置(长度/字符集/有效期/万能码)★ 独立配置</span></span>
<span class="line"><span>├── cors.php // 跨域配置(允许来源/方法/头)★ 独立配置</span></span>
<span class="line"><span>├── file.php // 文件上传配置(目录/域名/大小/后缀白名单)★ 独立配置</span></span>
<span class="line"><span>├── jwt.php // JWT 配置(密钥/有效期/签发者)★ 独立配置</span></span>
<span class="line"><span>├── middleware.php // 中间件配置(受信代理等)★ 独立配置</span></span>
<span class="line"><span>├── tenant.php // 多租户配置(默认租户 ID)★ 独立配置</span></span>
<span class="line"><span>├── generator.php // 代码生成器配置(父菜单 ID、应用名)</span></span>
<span class="line"><span>├── app.php // 应用配置(名称/时区/调试模式)</span></span>
<span class="line"><span>├── auth.php // 认证配置</span></span>
<span class="line"><span>├── cache.php // 缓存配置(redis 驱动)</span></span>
<span class="line"><span>├── database.php // 数据库配置(mysql/pgsql/sqlsrv/sqlite + redis)</span></span>
<span class="line"><span>├── filesystems.php // 文件系统配置</span></span>
<span class="line"><span>├── logging.php // 日志配置</span></span>
<span class="line"><span>├── mail.php // 邮件配置</span></span>
<span class="line"><span>├── queue.php // 队列配置</span></span>
<span class="line"><span>├── services.php // 第三方服务配置</span></span>
<span class="line"><span>└── session.php // 会话配置</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">独立配置约定</p><p>标 ★ 的 7 个配置文件为本项目<strong>独立维护</strong>(不与 Laravel 默认配置合并),通过 <code>config(&#39;jwt.secret&#39;)</code>、<code>config(&#39;file.domain_url&#39;)</code> 等方式读取。完整配置项见 <a href="/zh/appendix/config-reference.html">附录 C 配置项速查</a>。</p></div><h2 id="数据库目录-database-" tabindex="-1">数据库目录 (database/) <a class="header-anchor" href="#数据库目录-database-" aria-label="Permalink to &quot;数据库目录 (database/)&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>database/</span></span>
<span class="line"><span>├── migrations/ // 迁移目录(本项目为空,建表以 SQL 导出为准)</span></span>
<span class="line"><span>├── seeders/</span></span>
<span class="line"><span>│ └── DatabaseSeeder.php // 初始数据:租户、部门、角色、菜单、用户、字典</span></span>
<span class="line"><span>└── factories/ // 模型工厂</span></span></code></pre></div><div class="warning custom-block"><p class="custom-block-title">注意</p><p>本项目<strong>未使用 Laravel 迁移建表</strong>,数据库结构以 <code>document/&lt;数据库类型&gt;/rxthinkcmf.laravel13.elevue.sql</code> 脚本为准(25 张业务表,<code>laravel_</code> 前缀,五种数据库各有专用脚本)。<code>composer setup</code> 中的 <code>migrate --force</code> 仅初始化迁移记录表,不会创建业务表。详见 <a href="/zh/quickstart/database-init.html">2.5 数据库初始化</a>。</p></div><h2 id="代码生成模板-resources-templates-" tabindex="-1">代码生成模板 (resources/templates/) <a class="header-anchor" href="#代码生成模板-resources-templates-" aria-label="Permalink to &quot;代码生成模板 (resources/templates/)&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>resources/templates/</span></span>
<span class="line"><span>├── controller.php.tpl // 控制器模板</span></span>
<span class="line"><span>├── service.php.tpl // 服务层模板</span></span>
<span class="line"><span>├── model.php.tpl // 模型模板</span></span>
<span class="line"><span>├── request.php.tpl // FormRequest 模板</span></span>
<span class="line"><span>├── ui/ // 普通列表模板(前端文件)</span></span>
<span class="line"><span>│ ├── index.vue.tpl // 列表页模板</span></span>
<span class="line"><span>│ ├── edit.vue.tpl // 编辑弹窗模板</span></span>
<span class="line"><span>│ ├── detail.vue.tpl // 详情弹窗模板</span></span>
<span class="line"><span>│ ├── api.ts.tpl // API 接口模板</span></span>
<span class="line"><span>│ ├── columns.ts.tpl // 表格列定义模板</span></span>
<span class="line"><span>│ └── querySchemas.ts.tpl // 查询条件模板</span></span>
<span class="line"><span>└── ui2/ // 树形结构模板(前端文件)</span></span></code></pre></div><h2 id="路由目录-routes-" tabindex="-1">路由目录 (routes/) <a class="header-anchor" href="#路由目录-routes-" aria-label="Permalink to &quot;路由目录 (routes/)&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>routes/</span></span>
<span class="line"><span>├── api.php // ★ 全部 API 路由(约 165 条)</span></span>
<span class="line"><span>│ // 公开接口(login/captcha/refresh/oauth2)在中间件组外</span></span>
<span class="line"><span>│ // 认证接口在 [&#39;auth.jwt&#39;,&#39;tenant&#39;,&#39;log.operation&#39;] 组内</span></span>
<span class="line"><span>├── console.php // Artisan 调度注册</span></span>
<span class="line"><span>└── web.php // 欢迎页路由(/up 健康检查由 bootstrap/app.php 注册)</span></span></code></pre></div><h2 id="Docker-目录-docker-" tabindex="-1">Docker 目录 (docker/) <a class="header-anchor" href="#Docker-目录-docker-" aria-label="Permalink to &quot;Docker 目录 (docker/)&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>docker-compose.yml // 四容器编排(Nginx + PHP-FPM + MySQL + Redis)</span></span>
<span class="line"><span>docker/</span></span>
<span class="line"><span>├── Dockerfile // PHP 8.3-fpm 应用镜像(扩展 + Composer 依赖)</span></span>
<span class="line"><span>├── nginx.conf // Nginx 站点配置(Laravel 路由重写 + 安全规则)</span></span>
<span class="line"><span>└── .env.docker // 容器环境变量(密码、端口、JWT 密钥)</span></span></code></pre></div><h2 id="资料目录-document-" tabindex="-1">资料目录 (document/) <a class="header-anchor" href="#资料目录-document-" aria-label="Permalink to &quot;资料目录 (document/)&quot;">​</a></h2><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>document/</span></span>
<span class="line"><span>├── .gitignore // 忽略规则(脚本等大文件不进版本库)</span></span>
<span class="line"><span>├── mysql/</span></span>
<span class="line"><span>│ └── rxthinkcmf.laravel13.elevue.sql // ★ MySQL 初始化脚本(约 226MB,25 张业务表 + 初始数据)</span></span>
<span class="line"><span>├── postgresql/</span></span>
<span class="line"><span>│ └── rxthinkcmf.laravel13.elevue.sql // PostgreSQL 初始化脚本</span></span>
<span class="line"><span>├── sqlserver/</span></span>
<span class="line"><span>│ └── rxthinkcmf.laravel13.elevue.sql // SQL Server 初始化脚本</span></span>
<span class="line"><span>├── oracle/</span></span>
<span class="line"><span>│ └── rxthinkcmf.laravel13.elevue.sql // Oracle 初始化脚本</span></span>
<span class="line"><span>└── sqlite/</span></span>
<span class="line"><span> └── rxthinkcmf.laravel13.elevue.sql // SQLite 初始化脚本</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>五种数据库脚本按类型分组,已做对应 SQL 语法适配,直接导入即可(见 <a href="/zh/quickstart/database-init.html">2.5 数据库初始化</a>)。Docker 首次启动自动导入 <code>document/mysql/</code> 下的脚本。</p></div><h2 id="关键配置文件" tabindex="-1">关键配置文件 <a class="header-anchor" href="#关键配置文件" aria-label="Permalink to &quot;关键配置文件&quot;">​</a></h2><table tabindex="0"><thead><tr><th>文件</th><th>作用</th></tr></thead><tbody><tr><td><code>.env</code></td><td>数据库连接、JWT 密钥、Redis 密码、文件上传等环境变量</td></tr><tr><td><code>config/database.php</code></td><td>数据库配置(4 种关系库 + Redis 连接)</td></tr><tr><td><code>config/jwt.php</code></td><td>JWT 配置(密钥 / access·refresh 有效期 / 签发者)</td></tr><tr><td><code>config/file.php</code></td><td>文件上传配置(目录 / 域名 / 大小 / 后缀白名单)</td></tr><tr><td><code>config/cors.php</code></td><td>跨域配置(允许来源 / 方法 / 头)</td></tr><tr><td><code>config/app.php</code></td><td>应用配置(名称 / 时区 / 调试模式、受信代理 <code>trusted_proxies</code>)</td></tr><tr><td><code>config/api.php</code></td><td>响应驼峰/下划线自动转换开关</td></tr><tr><td><code>config/tenant.php</code></td><td>多租户配置(默认租户 ID)</td></tr><tr><td><code>config/generator.php</code></td><td>代码生成器配置(父菜单 ID、应用名)</td></tr><tr><td><code>composer.json</code></td><td>依赖清单 + <code>setup</code> / <code>dev</code> / <code>test</code> 脚本</td></tr><tr><td><code>bootstrap/app.php</code></td><td>中间件别名注册、全局中间件组、<code>/up</code> 健康检查</td></tr></tbody></table><div class="tip custom-block"><p class="custom-block-title">注意事项</p><ul><li>保持一致性:目录结构一旦确定,应保持一致性,避免随意更改。</li><li>合理划分模块:根据项目的实际需求,合理划分功能模块,避免过度模块化。</li><li>文档记录:在项目文档中详细说明目录结构和各模块的功能,便于新成员快速上手。</li><li>版本控制:使用 <code>Git</code> 等版本控制工具,并在 <code>.gitignore</code> 文件中配置不需要跟踪的目录和文件(<code>vendor/</code>、<code>storage/</code>、<code>.env</code> 等)。</li></ul></div><h2 id="总结" tabindex="-1">总结 <a class="header-anchor" href="#总结" aria-label="Permalink to &quot;总结&quot;">​</a></h2><p>软件架构的目录结构是项目开发和维护的基础,直接影响到项目的可维护性、可扩展性和开发效率。本项目采用分层的目录结构(后端 Controller → Service → Model,Trait 组合复用横切能力),结合模块化管理,是一个有效的解决方案。通过合理规划和遵循最佳实践,可以确保项目的结构清晰、功能明确,为团队开发和长期维护打下坚实的基础。</p>`,34)])])}const v=a(l,[["render",t]]);export{u as __pageData,v as default};