Skip to content

后端架构

项目概述

EBAOZU 多门店 V4,基于 CRMEB 二次开发的多门店电商平台。

  • 后端:ThinkPHP 8.0 + Swoole 4,PHP 8.0+
  • 前端:Admin(view/admin)、Store(view/store)、Uniapp(view/uniapp
  • V3 代码保留在 ebaozu_v3/ 作为迁移参考,V4 数据库文件位于 ebaozu_v3/ebaozu_v4.sql

技术栈

技术版本/说明
Swoole4.0.10(topthink/think-swoole
ThinkPHP ORM3.0
Think Queue3.0
MySQL>= 8.0
Redis缓存、队列、WebSocket Room
支付宝Alipay EasySDK 2.2
web后台vue2.6 + Element UI
移动端Vue 2 + Uni-app

项目结构

app/
  controller/    # 控制器(按 admin/api/store/cashier/supplier/kefu 分目录)
  services/      # 业务逻辑层
  dao/           # 数据访问层
  model/         # ORM 模型
  jobs/          # 队列任务
  listener/      # 事件监听器
  validate/      # 验证器(按子域分目录)
  websocket/     # WebSocket 处理器
  Request.php    # 自定义请求类(注入鉴权上下文)
  ExceptionHandle.php  # 全局异常处理
crmeb/
  basic/         # BaseController、BaseModel 等基类
  services/      # 共享服务(上传、微信、短信、打印、快递等)
  traits/        # 可复用 Trait
  utils/         # 工具类
route/
  admin.php      # /adminapi/*
  api.php        # /api/*(移动端)
  store.php      # /storeapi/*

严格分层

Controller → Services → DAO → Model

禁止绕过任何一层。数据组装在 Services 层,Model 只写搜索条件。

关键基类

基类说明
crmeb\basic\BaseController所有控制器基类(被 swoole_loader 加密)
app\services\BaseServices服务层基类(分页、事务)
app\dao\BaseDaoDAO 基类(需实现 setModel()
crmeb\basic\BaseModelORM 模型基类

路由

ThinkPHP 路由注解已禁用,所有路由显式定义于 route/ 各文件。

请求处理

使用 app\RequestgetMore() / postMore() 提取参数:

php
[$name, $status] = $request->postMore([
    'name',
    ['status', 1],  // 带默认值
], true);  // true = 一维数组(方便解构)

API 响应

php
return app('json')->success('消息', $data);
return app('json')->fail('消息', $data);
throw new \app\exceptions\AuthException('错误信息', 400);  // 由 ExceptionHandle 统一捕获

依赖注入

php
use think\annotation\Inject;
#[Inject]
protected LoginServices $services;

验证

php
validate(\app\validate\api\LoginValidate::class)->check($data);

队列与事件

  • 队列:app/jobs/(继承 crmeb\basic\BaseJobs
  • 事件监听:app/listener/
  • 事件定义:app/event.php

前端子系统

子系统路径API 前缀
总后台view/admin/adminapi
门店后台view/store/storeapi
移动端view/uniapp/api

EBAOZU V4 多门店租赁商城系统文档