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 调用 ![PHP](https://img.shields.io/badge/PHP-777BB4?style=for-the-badge&logo=php&logoColor=white) ![Symfony](https://img.shields.io/badge/Symfony-000000?style=for-the-badge&logo=symfony&logoColor=white) ![Doctrine](https://img.shields.io/badge/Doctrine-FC6A31?style=for-the-badge&logo=doctrine&logoColor=white) ![Twig](https://img.shields.io/badge/Twig-3776AB?style=for-the-badge&logo=twig&logoColor=white) ![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white) ## 概述 本代码库是一个基于 **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开发, 学习资源, 版权保护