Files
rxthinkcmf-wiki/RXThinkCMF_Laravel13_EleVue/zh/tech-stack.md
T
2026-10-08 17:50:29 +08:00

88 lines
5.7 KiB
Markdown
Raw 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.
# 1.5 技术栈说明
## 后端技术栈
| 类别 | 技术选型 | 版本 | 说明 |
|------|----------|------|------|
| 语言 | PHP | >= 8.3 | 强类型严格模式(composer.json `^8.3`) |
| 框架 | Laravel | 13.x | 核心 Web 框架(`laravel/framework ^13.0`) |
| ORM | Eloquent | 随框架 | 数据库操作,模型薄封装 + Trait 复用 |
| 认证 | firebase/php-jwt | 7.1+ | JWT 双令牌签发与解析(Redis 有状态) |
| Excel | phpoffice/phpspreadsheet | 5.10+ | Excel 导入导出 |
| IP 归属地 | zoujingli/ip2region | 3.0+ | 登录日志 IP 归属地解析(IPv4/IPv6) |
| 数据库 | MySQL | 8.0+ | 主数据库(另支持 PostgreSQL / SQL Server / Oracle / SQLite,五套初始化脚本齐备) |
| 缓存 | Redis | 6.0+ | **必需**:JWT 会话、权限缓存、验证码、字典缓存(phpredis 扩展) |
| Web 服务器 | Nginx | 1.18+ | 推荐(Docker 方案内置) |
| Web 服务器 | Apache | 2.4+ | 兼容(Laragon mod_php 方式,见 [2.2 Laragon 环境搭建](/zh/quickstart/laragon.html)) |
| 包管理 | Composer | 2.x | 依赖管理(`composer setup` 一键初始化) |
| 代码格式化 | laravel/pint | 1.27+(dev) | 提交前格式化(Pint 风格) |
| 日志查看 | laravel/pail | 1.2+(dev) | 实时日志流(`composer dev` 内置) |
| 测试 | phpunit/phpunit | 12.5+(dev) | Feature / Unit 测试 |
## 前端技术栈
前端为本仓库 `ui/` 目录内的 EleVue 管理后台(Vue3 + ElementPlus),与本后端通过 API 对接:
| 类别 | 技术选型 | 版本 | 说明 |
|------|----------|------|------|
| 框架 | Vue | 3.4+ | 核心 UI 框架(Composition API) |
| 语言 | TypeScript | 4.9+(实际 ^4.9.5) | 类型安全 |
| UI 库 | ElementPlus | 2.7+ | 组件库 |
| 构建工具 | Vite | 3.2+(实际 ^3.2.10) | 开发服务器与构建 |
| 状态管理 | Pinia | 2.1+ | 全局状态管理 |
| 路由 | Vue Router | 4.3+ | 路由管理 |
| HTTP | Axios | 0.27+(实际 ^0.27.2) | HTTP 请求(注:0.27.x 版本较老) |
| 富文本 | TinyMce | 5.10+ | 富文本编辑器 |
| 图表 | ECharts | 5.5+ | 数据可视化 |
| CSS | TailwindCSS | 3.4+ | 原子化 CSS |
| 权限 | v-perm 指令 | - | 按钮级权限指令,与后端 `#[Permission]` 对应 |
| 包管理 | pnpm | - | 高效包管理器 |
:::tip
前端工程结构、开发实践详见 [第 9 章 前端开发](/zh/frontend/overview.html);后端代码生成器会把前端页面模板输出到 `ui/` 目录(见 [10.6 自定义模板开发](/zh/generator/templates.html))。
:::
## 架构特点
一次 API 请求的完整链路(与 [4.2 请求处理链路](/zh/architecture/request-flow.html) 一致):
```text
┌─────────────────────────────────────────────────────────┐
│ 前端(Vue3 + ElementPlus) │
│ 通过 API 调用后端服务,纯 JSON 交互 │
└──────────────────────────┬──────────────────────────────┘
│ HTTP (JSON)
▼
┌─────────────────────────────────────────────────────────┐
│ 后端(Laravel 13) │
│ │
│ 路由(routes/api.php) → 中间件栈 → 控制器 → 服务 → 模型 │
│ │
│ 中间件栈(7 个): │
│ Proxy(真实IP) → Cors(跨域) → ForceJsonResponse(强制JSON) │
│ → auth.jwt(JWT认证+#[Permission]鉴权) │
│ → tenant(租户上下文) → log.operation(操作日志) │
│ → Demo(演示模式防护) │
│ │
│ Service 层:BaseService 属性声明 + 6 个 Trait 组合 │
│ (CRUD / 查询 / 文件 / 数据权限 / 字典翻译 / 唯一校验) │
└──────────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ 数据层(MySQL + Redis) │
│ MySQL 主存储(Eloquent + 软删除 + 审计字段) │
│ Redis 会话 / 缓存 / 队列(JWT 双令牌、字典、权限缓存) │
└─────────────────────────────────────────────────────────┘
```
核心设计决策:
| 决策 | 说明 |
|------|------|
| 声明式配置 + 基类钩子 | Service 子类只声明属性(查询字段、唯一规则、字典映射…),通用逻辑由 BaseService + 6 个 Trait 完成 |
| 菜单即权限 | `menu.permission` 字段即权限编码,`#[Permission]` 注解 + 中间件反射鉴权 |
| 统一响应 | HTTP 200 + body `{code, ok, msg, data}`,camelCase/snake_case 自动转换 |
| fail-close 安全 | `JWT_SECRET` 为空或不足 32 字符时拒绝启动(AppServiceProvider 启动校验) |
| 验证职责分层 | FormRequest 只做格式验证,Service 只做业务规则 |