介绍
Doggy Framework 是一个 AI 原生的企业级低代码开发框架,基于 Symfony 7.4 LTS(长期支持至 2029 年)构建。
为什么选择 Doggy?
- AI 原生:深度集成 MCP、Agent、多模型(阿里百炼、OpenAI、LM Studio),内置编码助手、自然语言查询、视觉识别等 AI 能力
- 低代码引擎:通过 PHP 8 Attribute 配合
@Ef自定义注解定义业务模型,自动生成数据库迁移和管理界面 - 企业级安全:WebAuthn 无密码登录、三员分立、密码策略、全链路审计日志
- 实时通信:基于 Mercure SSE 的实时推送,FrankenPHP 内置 Hub,无需额外服务
- 高性能:FrankenPHP Worker 模式 + zstd/br 压缩,PostgreSQL 优先架构
- 完整生态:组织架构、定时任务、文件存储、邮件系统、SunUI 组件库等开箱即用
技术栈
| 层级 | 技术 |
|---|---|
| 语言 | PHP 8.2+ |
| 框架 | Symfony 7.4 LTS |
| 运行时 | FrankenPHP (Worker 模式) via runtime/frankenphp-symfony |
| 数据库 | PostgreSQL 14+ |
| ORM | Doctrine ORM + StofDoctrineExtensionsBundle (Gedmo) |
| 消息队列 | Symfony Messenger (Doctrine Transport) |
| 实时通信 | Mercure SSE (dunglas/mercure) |
| AI | Symfony AI (MCP, Agent, Store, 多平台支持) |
| 认证 | WebAuthn (web-auth/webauthn-symfony-bundle) + JWT (firebase/jwt) |
| 文件存储 | League Flysystem (Local / OSS / S3) |
| 前端 | Twig + jQuery + SunUI 组件库 |
| 工具库 | PHPSpreadsheet, Imagine, Predis, Ramsey UUID |
系统要求
- PHP >= 8.2
- ext-ctype, ext-iconv
- PostgreSQL >= 14
- Composer >= 2.5
- Docker (推荐运行方式)
快速开始
安装
bash
git clone git@github.com:doggy/skeleton.git my-app
cd my-app环境配置
bash
cp .env.example .env
# 编辑 .env 配置数据库连接与 Mercure JWT 密钥启动服务
bash
docker compose up -dDocker 启动两个服务:
| 服务 | 镜像 | 说明 |
|---|---|---|
database | postgres:14-alpine | PostgreSQL 数据库,数据持久化到 named volume |
mercure | dunglas/mercure | Mercure SSE 实时推送 Hub,含健康检查 |
应用本身在宿主机通过 FrankenPHP 运行,不容器化 PHP。
访问
目录结构
config/
├── bundles.php # 已启用的 Symfony Bundle 列表
├── packages/ # 各 Bundle 配置
└── services.yaml
src/
├── Annotation/ # 自定义注解:Ef.php, EfGroup.php
├── Command/ # 16 个 Console 命令
├── Controller/ # Admin, Api, Security 控制器
├── Entity/ # Doctrine 实体 + CommonTrait
│ ├── Organization/ # Department, Position 等
│ ├── Platform/ # 平台相关实体
│ ├── Security/ # User, Role, Permission
│ ├── Storage/ # 文件存储实体
│ └── System/ # 系统配置实体
├── Form/ # 表单类型
├── Message/ # 异步消息
├── MessageHandler/ # 消息处理器
├── Repository/ # Doctrine Repository
├── Security/ # WebAuthn, JWT, Voter
├── Service/ # AI, Calendar, Security, Storage, Task, View 等
└── Twig/ # TwigExtension
Caddyfile # FrankenPHP 配置(含 Mercure Hub、压缩、缓存)
docker-compose.yml # 数据库 + Mercure Hub 服务编排已启用的核心 Bundle
| Bundle | 作用 |
|---|---|
| FrameworkBundle | Symfony 核心 |
| DoctrineBundle + MigrationsBundle | 数据库 ORM 与迁移 |
| SecurityBundle | 安全认证与授权 |
| TwigBundle + TwigExtraBundle | 模板引擎 |
| MonologBundle | 日志 |
| StofDoctrineExtensionsBundle | Gedmo 扩展(树形、时间戳、软删除等) |
| NelmioCorsBundle | CORS 支持 |
| WebauthnBundle | WebAuthn 无密码认证 |
| MercureBundle | 实时消息推送 |
| AiBundle | Symfony AI 集成 |
| FlysystemBundle | 文件存储抽象 |
| HautelookAliceBundle | 测试数据夹具 |
核心概念
动态模型
通过 @Ef 注解标记业务字段,配合 PHP 8 Attributes 定义模型,自动完成:
- 数据库迁移生成
- CRUD 界面渲染
- 数据验证规则
- 权限检查
php
use App\Annotation\Ef;
class Department
{
#[Ef(displayName: '部门名称', required: true)]
private string $name;
#[Ef(displayName: '部门编码', searchable: true)]
private string $code;
}参考:动态模型
实体通用 Trait
所有实体通过 CommonTrait 组合以下能力:
CommonTrait
├── BlameableTrait # 创建人/更新人自动记录
├── TimestampableTrait # 创建时间/更新时间自动记录
├── SoftDeleteTrait # 软删除
└── IdTrait # 自增主键组织架构
多级部门树(Nested Set)、员工管理、岗位体系,支持:
- 无限层级部门树(Gedmo NestedTree)
- 多公司与多部门归属
- 岗位与职级体系
- 批量用户导入导出(PHPSpreadsheet)
参考:组织架构
安全体系
- WebAuthn 无密码登录(支持 Passkey、安全密钥、生物识别)
- 三员分立(系统管理员、安全管理员、审计管理员)
- 密码复杂度与有效期策略
- 全链路操作审计
参考:WebAuthn 认证