Appearance
概述
系统开发遵循 PSR-12 与 PSR-4 规范。所有后端业务代码必须遵循严格的分层调用规则与编码约定。
严格四层架构 (禁止跨层绕过)
mermaid
graph TD
Controller["Controller 控制器 (app/controller/)"] --> Services["Services 业务服务层 (app/services/)"]
Services --> DAO["DAO 数据访问层 (app/dao/)"]
DAO --> Model["Model ORM 模型 (app/model/)"]层次职责
- Controller:负责参数校验(调用
validate/)、参数提取(getMore()/postMore())与响应封装,不写复杂业务逻辑; - Services:负责核心业务编排、事务处理(
transaction())与多表关联数据组装; - DAO:负责具体的数据库查询条件组装(必须继承
app\dao\BaseDao并实现setModel()); - Model:负责数据表字段映射、关联关系定义与搜索器(必须继承
crmeb\basic\BaseModel)。
严禁规则
- 必须使用 Services 或 DAO 类操作数据,严禁在控制器中直接
Db::table()或User::where(); - 严禁使用
$this->services->dao->...穿透调用; - 模型只写搜索器条件,数据转换与组装必须在 Services 层完成;
- 业务异常统一抛出
\app\exceptions\AuthException('错误描述', 400),由全局异常处理器统一拦截输出。
命名规范
| 类别 | 规范 | 示例 |
|---|---|---|
| 目录 / 静态文件名 | 小写 + 下划线 | user_address |
| 类名 / 类文件名 | 大驼峰 (PascalCase) | UserAddress.php |
| 控制器方法 | 小写 + 下划线 (蛇形) | get_client_ip() |
| Service / DAO 方法 | 小驼峰 (camelCase) | getUserInfo(), getSearchList() |
| 属性变量 | 小驼峰 (camelCase) | $tableName, $userServices |
| 常量 / 环境变量 | 全大写 + 下划线 | APP_DEBUG, DEFAULT_TIMEZONE |
| 数据表 / 字段 | 小写 + 下划线 | eb_store_order, user_id |
文件编码要求
- 所有 PHP / JS / Vue / SQL 文件默认保持 UTF-8 (无 BOM) + LF 换行符 编码;
- 严禁汉字乱码与文件编码混用。