# YPB2C 项目架构

本文仅记录项目客观结构、入口、调用关系和技术形态，不定义开发流程或编码规则。

## 1. 项目定位

YPB2C 是传统无命名空间自研 PHP MVC 项目，由共享核心、多个活动应用入口、业务模块、模板和四套多租户目录组成。

核心代码：

| 位置 | 职责 |
|---|---|
| `mvc/mvc.php` | MVC 初始化、路由与项目加载器 |
| `mvc/lib/LibFc.php` | 公共函数与通用返回 |
| `mvc/lib/LibTpl.php` | PHP 模板传值与渲染 |
| `mvc/lib/LibDb.php` | 数据访问层底层实现 |
| `mvc/lib/LibLog.php` | 日志 |
| `mod_*/` | 业务模块及对应 Base |
| `mod_base/BaseDb.class.php` | 通用数据访问适配器 |

总体调用关系：

```mermaid
flowchart LR
    R["Web 或 CLI 请求"] --> E["活动应用入口"]
    E --> M["mvc/mvc.php"]
    M --> A["Action::method"]
    A --> S["业务方法"]
    S --> B["业务 Base 或 BaseDb"]
    B --> D["LibDb 底层实现"]
    A --> T["LibTpl 模板"]
    A --> J["LibFc 接口结果"]
```

## 2. 应用入口

| 目录 | 产品名称 | 入口 |
|---|---|---|
| `admin/` | 跑街后台 | `admin/index.php` |
| `admins/` | 目录后台 | `admins/index.php` |
| `api/` | 目录助手 API | `api/index.php` |
| `apps/` | 目录助手 | `apps/index.php` |
| `crm/` | 跑街CRM | `crm/index.php` |
| `home/` | 跑街商城 | `home/index.php` |

`daili/`、`app/`、`na/` 已停止使用且不再维护。

## 3. 请求链与 CLI

常规请求链：

1. Web 请求进入对应活动应用的 `index.php`。
2. 入口完成运行引导并加载 `mvc/mvc.php`。
3. `mvc::execute()` 解析类路径、类、方法和参数。
4. 框架定位 `{class}Action`，文件通常位于应用 `action/{ClassPath/}{class}Action.php`。
5. Action 调用业务方法，再输出模板或接口结果。

默认路由为 `index/index`。模板通常位于应用 `tpl/{ClassPath/}{class}/{method}.php`，其中类路径为可选部分。

CLI 支持以下参数格式：

```text
php admin/index.php shop index a=1 b=2
```

入口后的第一个位置参数是类名，第二个位置参数是方法名，后续参数使用 `key=value` 形式。

## 4. 多租户结构

| 目录 | 产品名称 | 共享与实例结构 |
|---|---|---|
| `shop/` | 跑街店铺 | `shop/system/` + `shop/{店铺ID}/` |
| `gzh/` | 联动版目录 | `gzh/system/` + `gzh/{店铺ID}/` |
| `super/` | 公众号目录 | `super/system/` + `super/{店铺ID}/` |
| `dshop/` | 代理店铺 | `dshop/system/` + `dshop/{店铺ID}/` |

共享目录提供通用实现，数字目录可能覆盖 Action、模板或静态资源。共享文件可能影响全部实例，实例文件通常只影响对应租户。

## 5. 数据层

标准调用方向：

```text
Action / 业务代码
    -> 业务方法
        -> 对应模块 XXXBase.class.php
           或 mod_base/BaseDb.class.php
            -> mvc/lib/LibDb.php
```

业务 Base 的方法命名和返回细节并不完全统一。历史代码可能存在越过 Base 的底层调用。

常见输出和日志出口：

- `LibFc::ReturnData()`、`ReturnJson()`：业务结果或接口输出。
- `LibTpl::Set()`、`Put()`、`Fetch()`：模板传值、页面或片段渲染。
- `LibLog::write()`：项目日志出口。

## 6. 前端概览

项目没有统一前端技术栈：

- 跑街后台 `admin` 同时存在 Bootstrap 和 layui/layuiAdmin 页面。
- 目录后台 `admins`、跑街CRM `crm` 以历史 jQuery/layui 页面为主。
- 跑街商城 `home` 与跑街店铺 `shop` 复用部分公共头和静态资源。
- 目录助手 `apps` 是服务端渲染移动页面。
- 联动版目录 `gzh`、公众号目录 `super`、代理店铺 `dshop` 以历史 jQuery/MUI 页面为主。
