Skip to content

后端代码目录结构说明

1. src/ 与 Bundle 总览

src/ 下共 50*Bundle 目录,每个 Bundle 对应一块独立业务域,采用 Action → Service → Repository/Entity 分层。
平台级公共能力集中在 EspierBundle

1.1 平台基础

Bundle一句话说明
EspierBundle平台核心:认证授权、Dingo 集成、中间件、通用 SDK、Redis 脚本、Fractal 转换
SuperAdminBundle超级管理员与平台级运维
CompanysBundle企业/公司主体、多租户与公司维度配置
OpenapiBundle对外开放 API 网关:鉴权、过滤、规则校验
DataCubeBundle数据统计立方体与报表分析
FormBundle自定义表单定义与数据采集
ThemeBundle店铺主题、页面装修与视觉配置
TdksetBundle页面 SEO 的 Title / Description / Keywords
ShopmenuBorderBundle店铺导航菜单边框与样式配置

1.2 商品

Bundle说明
GoodsBundle商品 SPU/SKU、分类、属性、库存
TbItemsBundle淘宝/外部平台商品同步
PointsmallBundle积分商城商品与兑换
CommentsBundle商品评价、晒单与评论

1.3 订单 / 交易

Bundle说明
OrdersBundle订单创建、状态流转、支付与履约
AftersalesBundle售后申请、退款、退货
ReservationBundle预约类/服务类订单
DepositBundle定金、预售与分阶段支付
CrossBorderBundle跨境贸易订单、报关

1.4 支付

Bundle说明
PaymentBundle支付抽象层(无 Entity,交易以 trade 表为代表)
AdaPayBundle汇付 AdaPay
BsPayBundle汇付斗拱(BsPay)
ChinaumsPayBundle银联商务
HfPayBundle汇付 HfPay
IcbcPayBundle工商银行 ICBC

1.5 会员 / 营销

Bundle说明
MembersBundle会员注册、资料、等级
PointBundle积分规则与流水
PromotionsBundle满减、折扣、活动等促销
KaquanBundle卡券、优惠券模板与核销
PopularizeBundle推广员、裂变与分享
OneCodeBundle一物一码、扫码溯源
EmployeePurchaseBundle员工内购专区

1.6 渠道 / 店铺

Bundle说明
DistributionBundle分销渠道、经销商与分润
MerchantBundle商户入驻、门店管理
SupplierBundle供应商档案、供货与结算
SalespersonBundle导购员与业绩归属
SelfserviceBundle自助收银、自助终端

1.7 微信 / 社交

Bundle说明
WechatBundle微信公众号、小程序消息与 OAuth
WorkWechatBundle企业微信通讯录、客户联系
ImBundle即时通讯、在线客服
CommunityBundle社区帖子、话题与互动
WsugcBundle微信侧 UGC 同步

1.8 第三方 / ERP

Bundle说明
SystemLinkBundleShopex ERP / 系统链路同步
ThirdPartyBundle通用第三方回调与适配
ShuyunBundle数云 CRM 对接
ShuyunOpenPlatformBundle数云开放平台
YoushuBundle有数数据分析
ShopexAIBundleShopeX AI 能力
KujialeBundle酷家乐 3D 设计对接
AliBundle阿里云 OSS、日志等
AliyunsmsBundle阿里云短信

2. 典型 Bundle 内部结构

GoodsBundle 为典型示例:

GoodsBundle/
├── Api/              # 对外 API 契约或 DTO(部分 Bundle)
├── ApiServices/      # API 层专用服务
├── Console/          # Artisan 命令
├── Entities/         # Doctrine 实体
├── Events/           # 领域事件
├── Http/             # Action 控制器(Api / Frontapi / Admin 等)
├── Jobs/             # 异步队列任务
├── Listeners/        # 事件监听器
├── Providers/        # Service Provider
├── Repositories/     # 数据访问层
├── Routes/           # Bundle 内路由片段(若有)
├── Services/         # 业务逻辑层
└── Traits/           # 可复用 Trait

HTTP 分层示例

Http/Api/V1/Action/Items.php    # 商品 API 入口

结构变体

Bundle特点
EspierBundleAuthDingoMiddlewareSdkRedisLuaScriptFractal
GoodsBundle完整业务栈参考模板
CommentsBundle精简型:Entities、Http、Repositories、Services
OpenapiBundle网关型:Constants、Filter、Middleware、Rules、Exceptions

3. 架构分层

层级位置职责
路由routes/{端}/{模块}.phpURL、HTTP 方法、中间件、Action 绑定
控制器{Bundle}\Http\{Api|Frontapi}\V1\Action\{Name}参数校验、调用 Service、返回响应
服务{Bundle}\Services\{Name}Service业务规则、事务编排
仓储{Bundle}\Repositories\{Name}RepositoryDoctrine 查询与持久化
实体{Bundle}\Entities\{Name}表结构与字段映射

商品列表示例链路

routes/api/goods.php
  → GoodsBundle\Http\Api\V1\Action\Items@getItemsList
    → GoodsBundle\Services\ItemsService
      → GoodsBundle\Repositories\ItemsRepository
        → GoodsBundle\Entities\Items

4. 命名规范

类型约定示例
Bundle 目录{Domain}Bundle,PascalCaseGoodsBundle
Action{Resource}.php,方法动词开头Items@getItemsList
Service{Resource}Service.phpItemsService.php
Repository{Resource}Repository.phpItemsRepository.php
Entity单数名词ItemsOrders
路由文件小写模块名routes/api/goods.php
路由命名 as{模块}.{资源}.{动作}goods.items.lists
Console 命令{Bundle}\Console\Commands\{Name}Command
测试类{被测类}{场景}Test.phptests/

命名空间与 PSR-4 见 composer.jsonautoload.psr-4src/ 映射到各 Bundle 根命名空间)。


5. 新增功能放哪

  1. 新业务域:在 src/ 下新建 {Domain}Bundle,注册 Provider,在 routes/ 对应端增加路由文件。
  2. 现有域扩展:在对应 Bundle 的 Http/ActionServicesEntities 中扩展。
  3. 横切能力(认证、缓存、日志):优先扩展 EspierBundle;确需应用级横切时可放在 app/(不写业务域逻辑)。
  4. 对外开放 API:经 OpenapiBundle 网关注册与校验。