简介
本技术栈说明面向DouPHP项目的后端、前端与小程序技术栈,覆盖PHP版本要求、自研MVC框架、数据库支持、模板引擎、前端响应式与移动端适配、小程序开发环境与TypeScript支持,以及第三方依赖(图像处理、邮件发送、支付网关SDK)等。文档同时给出版本兼容性说明与升级建议,帮助开发者快速理解并安全演进系统。
项目结构
- 入口与引导:根入口 index.php 负责加载核心引导程序 core/bootstrap.php,完成常量定义、配置加载、自动加载、容器初始化、路由委托设置与请求分发。
- 多端架构:
- 前台 front/:面向用户的前端业务控制器、服务、模型与路由。
- 管理后台 admin/:后台控制器、服务、模型、路由与视图。
- API 接口 api/:面向小程序与外部系统的REST风格接口。
- 小程序 miniprogram/:微信小程序工程,包含默认与公司版两套主题。
- 核心框架 core/:提供路由、HTTP、ORM、模板、文件系统、事件、异常、中间件、门面与工具库等基础设施。
- 插件与扩展 plugin/:支付、物流、登录、短信等能力以插件形式接入。
- 主题 theme/ 与 newtheme/:DWT模板系统与新版模板资源。
- 配置 config/:站点、模块、路由、安全、存储等配置。
- 静态资源 images/、languages/ 等。
graph TB
A["index.php<br/>应用入口"] --> B["core/bootstrap.php<br/>引导与初始化"]
B --> C["config/config.php<br/>站点配置"]
B --> D["core/autoload.php<br/>自动加载"]
B --> E["DI容器/门面注册"]
A --> F["Route::dispatch()<br/>路由调度"]
F --> G["front/ 前台"]
F --> H["admin/ 后台"]
F --> I["api/ 接口"]
F --> J["miniprogram/ 小程序(通过API)"]
图表来源
- index.php:16-41
- core/bootstrap.php:19-174
- config/config.php:15-52
章节来源
- index.php:16-75
- core/bootstrap.php:19-174
- config/config.php:15-52
核心组件
- PHP运行环境
- 最低版本:PHP 5.6+(启动时进行版本检测)。
- 字符集:UTF-8(DOU_CHARSET)。
- 自研MVC框架
- 路由:DelegatingRouter + 声明式路由(前台/后台/API各自路由文件)。
- 控制器:按领域划分(front/admin/api),统一基类。
- 服务层:service/ 下按业务域组织,封装复杂逻辑。
- ORM:基于查询构建器与模型的轻量ORM。
- 模板:DWT模板系统(.dwt文件),配合View门面渲染。
- 中间件:安全头、CSRF、限流、认证等。
- 数据库
- 支持MySQL(通过DB门面与ORM访问)。
- 连接信息来自配置(host/user/pass/name/prefix)。
- 模板引擎
- DWT模板系统:位于 theme/ 与 newtheme/ 下的 .dwt 模板文件,由View门面驱动渲染。
- 前端
- HTML/CSS/JavaScript:传统服务端渲染页面,使用CSS媒体查询实现响应式布局。
- 移动端适配:主题内包含响应式样式与polyfill(如Respond.js)。
- 小程序
- 微信小程序工程:miniprogram/ 下包含默认与公司版两套主题。
- TypeScript支持:tsconfig.json 启用TS编译;类型定义 libs/miniprogram-api-typings。
- 第三方依赖
- 图像处理:Image门面(底层调用GD/Imagick)。
- 邮件发送:Mail类(SMTP/本地驱动)。
- 支付网关:微信支付、支付宝、PayPal、Stripe、银行网关等插件化集成。
章节来源
- core/bootstrap.php:19-22
- config/config.php:15-52
- core/facade/Image.php
- core/library/mail/Mail.php
- theme/default/css/style.css:15-19
- miniprogram/default/tsconfig.json
架构总览
系统采用“单入口 + 多端路由”的架构:根入口统一引导后,将请求分派到前台、后台或API。各端遵循相同的MVC与服务分层,共享核心框架能力(路由、ORM、模板、事件、中间件等)。小程序通过API与后端交互,复用同一套数据模型与服务。
sequenceDiagram
participant U as "浏览器/客户端"
participant R as "index.php"
participant B as "core/bootstrap.php"
participant RT as "路由调度"
participant FE as "front/ 前台"
participant AD as "admin/ 后台"
participant AP as "api/ 接口"
participant DB as "数据库"
U->>R : HTTP请求
R->>B : 加载引导
B-->>RT : 注册路由/容器/门面
RT-->>FE : 匹配前台路由
RT-->>AD : 匹配后台路由
RT-->>AP : 匹配API路由
FE->>DB : 读取/写入数据
AD->>DB : 读取/写入数据
AP->>DB : 读取/写入数据
FE-->>U : 渲染HTML(DWT)
AD-->>U : 渲染HTML(后台视图)
AP-->>U : JSON响应
图表来源
- index.php:16-41
- core/bootstrap.php:115-174
详细组件分析
后端技术栈:PHP与自研MVC
- PHP版本要求与引导流程
- 启动阶段检查PHP版本,低于5.6直接终止。
- 定义根路径、配置路径、存储路径、协议常量。
- 加载站点配置(数据库、目录、密钥、调试开关)。
- 注册自动加载、门面别名、DI容器、路由委托、Request单例与全局助手。
- MVC与路由
- 三端独立路由文件(front/admin/api),集中声明式路由。
- 控制器按领域划分,服务层封装业务逻辑,模型使用ORM。
- 模板渲染
- 使用DWT模板系统,View门面负责渲染与变量注入。
- 错误处理
- 统一捕获异常,区分JSON与HTML响应,支持站点调试模式输出详细堆栈。
flowchart TD
Start(["应用启动"]) --> CheckPHP["检查PHP版本"]
CheckPHP --> |通过| LoadConfig["加载站点配置"]
CheckPHP --> |不通过| Exit["终止并提示升级"]
LoadConfig --> Register["注册自动加载/门面/容器"]
Register --> RouteSetup["设置路由委托/捕获Request"]
RouteSetup --> Dispatch["路由分发"]
Dispatch --> Render{"响应类型?"}
Render --> |HTML| DWT["DWT模板渲染"]
Render --> |JSON| Json["JSON响应"]
DWT --> End(["结束"])
Json --> End
图表来源
- core/bootstrap.php:19-174
- index.php:38-75
章节来源
- core/bootstrap.php:19-174
- index.php:38-75
数据库支持:MySQL
- 连接配置来源于 config/config.php(host/user/pass/name/prefix)。
- 通过DB门面与ORM进行查询与事务操作。
- 表前缀可配置,便于多实例隔离。
classDiagram
class DB_门面 {
+table(name) QueryBuilder
+query(sql, bindings)
+transaction(closure)
}
class ORM_Model {
+find(id) Model
+where(...) Builder
+save() bool
}
DB_门面 --> ORM_Model : "被模型使用"
图表来源
- config/config.php:15-28
章节来源
- config/config.php:15-28
模板引擎:DWT模板系统
- 模板文件位于 theme/ 与 newtheme/,后缀为 .dwt。
- View门面负责加载模板、注入变量、输出HTML。
- 支持模块化include与语言包替换。
sequenceDiagram
participant C as "控制器"
participant V as "View门面"
participant T as "DWT模板"
C->>V : 渲染模板(名称, 变量)
V->>T : 解析.dvt模板
T-->>V : 生成HTML片段
V-->>C : 返回HTML
C-->>客户端 : 发送HTML
图表来源
- core/facade/View.php
章节来源
- core/facade/View.php
前端技术栈:HTML/CSS/JavaScript与响应式
- 使用标准HTML/CSS/JS,服务端渲染页面。
- 通过CSS媒体查询实现响应式布局(例如在较大屏幕限制容器宽度)。
- 部分主题包含Respond.js用于旧版浏览器媒体查询兼容。
flowchart TD
A["HTML页面"] --> B["CSS样式(媒体查询)"]
B --> C["响应式布局(桌面/平板/手机)"]
C --> D["可选Polyfill(Respond.js)"]
图表来源
- theme/default/css/style.css:15-19
章节来源
- theme/default/css/style.css:15-19
小程序技术栈:微信小程序与TypeScript
- 工程结构:miniprogram/ 下包含默认与公司版两套主题,含pages、services、stores、utils、types等。
- TypeScript:tsconfig.json启用TS编译;libs/miniprogram-api-typings提供微信API类型定义。
- 状态管理与网络:stores(MobX)、services(HTTP封装)、utils(工具函数)。
graph LR
subgraph "小程序工程"
P["pages/ 页面"] --> S["services/ 服务"]
S --> ST["stores/ 状态"]
S --> U["utils/ 工具"]
S --> T["types/ 类型"]
end
S --> API["后端API"]
图表来源
- miniprogram/default/app.json
- miniprogram/default/tsconfig.json
章节来源
- miniprogram/default/app.json
- miniprogram/default/tsconfig.json
第三方依赖:图像处理、邮件发送、支付网关
- 图像处理:Image门面提供缩略图、裁剪、水印等功能,底层依赖GD/Imagick扩展。
- 邮件发送:Mail类支持SMTP与本地驱动,可通过配置切换。
- 支付网关:插件化接入微信支付、支付宝、PayPal、Stripe、银行网关等,统一通过Provider/Service抽象。
graph TB
IMG["Image门面"] --> GD["GD/Imagick扩展"]
MAIL["Mail类"] --> SMTP["SMTP服务器"]
PAY_WX["wxpay插件"] --> WX_API["微信支付API"]
PAY_ALI["alipay插件"] --> ALI_API["支付宝API"]
PAY_PP["paypal插件"] --> PP_API["PayPal API"]
PAY_STRIPE["stripe插件"] --> STRIPE_API["Stripe API"]
PAY_BANK["bankpay插件"] --> BANK_API["银行网关API"]
图表来源
- core/facade/Image.php
- core/library/mail/Mail.php
- plugin/wxpay/WxpayProvider.php
- plugin/alipay/AlipayProvider.php
- plugin/paypal/PaypalProvider.php
- plugin/stripe/stripeservice.php
- plugin/bankpay/BankpayProvider.php
章节来源
- core/facade/Image.php
- core/library/mail/Mail.php
- plugin/wxpay/WxpayProvider.php
- plugin/alipay/AlipayProvider.php
- plugin/paypal/PaypalProvider.php
- plugin/stripe/stripeservice.php
- plugin/bankpay/BankpayProvider.php
依赖关系分析
- 入口依赖引导程序,引导程序依赖配置与自动加载。
- 路由依赖容器与Request单例,控制器依赖服务层,服务层依赖ORM与门面。
- 小程序依赖API接口,API接口依赖服务层与ORM。
- 插件通过Provider/Service与核心框架解耦,便于扩展与维护。
graph TB
IDX["index.php"] --> BOOT["core/bootstrap.php"]
BOOT --> CFG["config/config.php"]
BOOT --> AUTO["core/autoload.php"]
BOOT --> FACADE["门面/容器"]
IDX --> ROUTE["路由调度"]
ROUTE --> FRONT["front/"]
ROUTE --> ADMIN["admin/"]
ROUTE --> API["api/"]
API --> SVC["服务层"]
SVC --> ORM["ORM/DB"]
SVC --> PLUG["插件(支付/物流/登录)"]
图表来源
- index.php:16-41
- core/bootstrap.php:115-174
章节来源
- index.php:16-41
- core/bootstrap.php:115-174
性能考虑
- 启动优化:引导阶段仅加载必要组件,延迟注册场景事件与邮件通知。
- 路由与缓存:声明式路由清晰,可结合缓存减少重复解析。
- 数据库:合理使用索引与查询构建器,避免N+1问题。
- 模板:DWT模板按需加载,减少不必要的include。
- 图片:使用Image门面进行压缩与缓存,降低带宽占用。
- 小程序:合理分包与懒加载,减少首屏体积。
故障排查指南
- 未安装引导:若storage/install.lock不存在且非安装路径,将重定向至安装程序。
- 版本不兼容:PHP版本低于5.6将直接终止并提示升级。
- 异常处理:
- JSON请求:返回结构化错误码与消息。
- HTML请求:根据site.debug输出调试页或友好错误页。
- 微信被动消息:XML解析失败时直接返回空,需检查签名与格式。
flowchart TD
EStart["异常捕获"] --> IsJson{"是否JSON请求?"}
IsJson --> |是| ApiErr["返回API错误(JSON)"]
IsJson --> |否| Debug{"是否开启调试?"}
Debug --> |是| HtmlErr["输出调试HTML"]
Debug --> |否| Msg["显示友好错误页"]
ApiErr --> EEnd(["结束"])
HtmlErr --> EEnd
Msg --> EEnd
图表来源
- index.php:46-75
- core/service/weixin/WeixinService.php:72-99
章节来源
- index.php:46-75
- core/service/weixin/WeixinService.php:72-99
结论
DouPHP采用自研MVC框架与DWT模板系统,结合PHP 5.6+与MySQL,提供前台、后台、API与小程序的多端架构。通过插件化集成支付、物流与登录等能力,具备良好的可扩展性与维护性。前端采用响应式设计,小程序支持TypeScript与类型定义,整体技术栈兼顾稳定性与现代化开发体验。建议在升级时关注PHP版本、数据库驱动与第三方SDK的兼容性,并逐步引入缓存与异步任务以提升性能。
附录
- 版本兼容性
- PHP:最低5.6,推荐更高版本以获得更好的性能与安全特性。
- MySQL:建议使用5.7+或8.0+,注意字符集与排序规则。
- 小程序:微信开发者工具最新版,TypeScript编译目标与模块规范需与tsconfig一致。
- 升级指南
- 升级PHP前,确认扩展(GD/Imagick、PDO/MySQL、OpenSSL等)可用。
- 升级数据库前,备份数据并验证迁移脚本。
- 升级第三方SDK时,核对签名算法与回调地址变更。
- 升级模板与主题时,确保DWT语法兼容。