MuhamedHabib/All-you-need-on-symfony-bundles-crud-reverse-engineering-api-consumption
GitHub: MuhamedHabib/All-you-need-on-symfony-bundles-crud-reverse-engineering-api-consumption
基于 Symfony 4.4 的教学参考项目,通过实际代码演示 Bundle 管理、CRUD、数据库逆向工程、表单验证、邮件与图表等 Web 开发核心模块的协同工作。
Stars: 20 | Forks: 0
# Symfony 精要 — Bundles、CRUD、逆向工程与 API 调用





## 概述
本代码库是一个基于 **Symfony 4.4 LTS** 构建的学习与参考项目。它详细介绍了 Symfony Web 应用程序的日常构建模块:注册和使用 bundles、使用 Doctrine ORM 建模实体、生成完整的 CRUD 界面、通过迁移对数据库进行逆向工程、处理带有验证的表单、发送电子邮件、渲染图表,以及构建实体结构以便后续将其提供给 API/移动端客户端使用。
它特意保持得小巧且易于阅读——这是一个用于学习各个组件如何协同工作的理想之地,而非一个生产级应用程序。
## 涵盖主题
以下每个主题均立足于本代码库中的实际代码。
### Bundles
本项目组装了一个真实的 bundle 技术栈(参见 `config/bundles.php`):
- **FrameworkBundle**、**TwigBundle** — 核心 HTTP、路由和模板。
- **DoctrineBundle** + **DoctrineMigrationsBundle** — ORM 和 schema 版本控制。
- **SecurityBundle** — 安全/防火墙配置。
- **MakerBundle** — 通过 CLI 脚手架搭建实体、CRUD 和表单。
- **SwiftmailerBundle** — 从控制器中发送电子邮件。
- **SensioFrameworkExtraBundle** — 基于注解的路由和约定。
- **ChartjsBundle** (Symfony UX) 和 **CMENGoogleChartsBundle** — 在 Twig 中渲染图表。
- **MonologBundle**、**DebugBundle**、**WebProfilerBundle**、**DoctrineFixturesBundle** (开发/测试环境)。
### CRUD
通过控制器、表单、存储库和 Twig 模板串联起来的完整创建/读取/更新/删除流程:
- `FormController` — 对 `Formulaire` 实体执行 CRUD 操作 (`/form`),外加按 `Sexe` 分组的记录饼图。
- `QuestionsController` — 对 `Questionss` 实体执行 CRUD 操作 (`/questions`),包含受 CSRF 保护的删除操作。
- `templates/form/` 和 `templates/questions/` 下相应的 Twig 模板 (`index`、`new`、`edit`、`show`、`_form`、`_delete_form`)。
### 数据库逆向工程
`migrations/` 文件夹展示了由 Doctrine 迁移 (`Version2021…`) 驱动的 schema 演进,包括诸如添加/删除列以及调整字符集/排序规则等 `ALTER TABLE` 操作。结合 `bin/console doctrine:mapping:import` / `make:entity`,这阐释了现有数据库 schema 与带注解的 Doctrine 实体 (`src/Entity/`) 之间的往返映射过程。
### 表单与验证
`src/Form/` 中的 Symfony Form 类型 (`ContactType`、`FormulaireType`、`QuestionssType`) 绑定到实体,并在实体上声明作为注解的验证约束(例如 `Formulaire` 上的 `@Assert\NotBlank`、`@Assert\Length`、`@Assert\Positive`)。
### 电子邮件
`ContactController` 通过 Swift Mailer 构建并发送消息,使用 `templates/emails/` 和 `templates/emailTemplate/` 下的 Twig 电子邮件模板渲染邮件正文。
### 图表
`FormController` 使用自定义的存储库查询 (`FormulaireRepository::filter()`) 来聚合数据,并输入到在表单首页视图中渲染的 Google `PieChart` 中。
### API / 移动端调用
实体和 CRUD 层的结构使其能够提供给 API/移动端客户端使用。Doctrine 实体 (`Contact`、`Formulaire`、`Questionss`) 提供了简洁的 getter/setter,并且技术栈中提供了 `symfony/serializer` 组件——这是向移动端前端提供 JSON 数据的基础。
## 技术栈
| 层级 | 技术 |
|-------|------------|
| 语言 | PHP `>= 7.1.3` |
| 框架 | Symfony `4.4.*` (LTS) |
| ORM | Doctrine ORM `^2.10` + Doctrine Migrations |
| 模板引擎 | Twig `^2.12 \|\| ^3.0` |
| 数据库 | MySQL(迁移使用 MySQL DDL);通过内置的 Docker Compose 可使用 PostgreSQL |
| 邮件 | Swift Mailer |
| 图表 | Symfony UX Chart.js + CMEN Google Charts |
| 工具链 | Composer, Symfony CLI, Symfony Maker, PHPUnit `^9.5` |
## 项目结构
```
.
├── bin/ # Symfony console entry point
├── config/
│ ├── bundles.php # Registered bundles
│ ├── packages/ # Per-bundle configuration (doctrine, twig, security, mailer…)
│ └── routes/ # Routing (annotations + YAML)
├── migrations/ # Doctrine migration versions (schema evolution)
├── public/ # Web root (index.php, assets)
├── src/
│ ├── Controller/ # Admin, Base, Contact, Fin, Form, Questions, Salutation
│ ├── Entity/ # Contact, Formulaire, Questionss
│ ├── Form/ # Form types (Contact, Formulaire, Questionss)
│ ├── Repository/ # Doctrine repositories (custom queries, e.g. filter())
│ └── Kernel.php
├── templates/ # Twig views (CRUD, emails, admin, base layouts)
├── tests/ # PHPUnit test scaffold
├── translations/ # Translation catalog directory
├── composer.json # Dependencies & autoload
├── docker-compose.yml # Database (+ mailcatcher in override)
└── phpunit.xml.dist
```
## 快速开始
### 前置条件
- PHP `>= 7.1.3`(包含 `ctype`、`iconv` 扩展)
- [Composer](https://getcomposer.org/)
- [Symfony CLI](https://symfony.com/download)
- MySQL(或 PostgreSQL)— 可选通过 Docker
### 1. 克隆并安装依赖
```
git clone https://github.com/MuhamedHabib/All-you-need-on-symfony-bundles-crud-reverse-engineering-api-consumption.git
cd All-you-need-on-symfony-bundles-crud-reverse-engineering-api-consumption
composer install
```
### 2. 配置环境
将 `.env` 复制为 `.env.local` 并设置您自己的值(切勿提交真实的凭据):
```
cp .env .env.local
```
然后编辑 `.env.local` 以提供您的 `DATABASE_URL`、`MAILER_URL` 和 `APP_SECRET`。MySQL URL 采用以下格式:
```
DATABASE_URL="mysql://user:password@127.0.0.1:3306/dbname?serverVersion=…"
```
### 3. 创建 schema 并运行迁移
```
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
```
### 4. 运行应用程序
```
symfony serve
# 或
php bin/console server:run
```
然后访问 `http://localhost:8000`。
### 5. (可选) 运行测试
```
php bin/phpunit
```
## 注意事项
- 这是一个关于 **Symfony 4.4 LTS** 的教学/参考项目——与较新的 Symfony 相比,预计会包含较旧的模式(例如,使用 Swift Mailer 而非 Symfony Mailer,使用注解路由而非 PHP 属性)。
- 此处不包含任何密钥。`.env` 文件仅附带占位符密钥;请务必在已被 gitignore 忽略的 `.env.local` 中设置真实值。
- 部分实体属性和 UI 字符串为法语(该项目的原始语言);相关代码及本指南使用英语。
- 上述主题背后的控制台助手:`php bin/console make:entity`、`make:crud` 和 `doctrine:mapping:import`。
由 Mohamed Habib Khattat 构建 — GitHub (@MuhamedHabib) · LinkedIn
标签:Doctrine, LLM鲁棒性, OpenVAS, PHP, Symfony, Syscall, Web开发, 学习资源, 版权保护