Symfony DDD Skeleton 项目教程
1. 项目的目录结构及介绍
Symfony DDD Skeleton 项目采用 DDD(领域驱动设计)和 CQRS(命令查询职责分离)架构,其目录结构旨在支持复杂应用的开发。以下是项目的主要目录结构及其介绍:
symfony-ddd-skeleton/
├── bin/ # 包含 Symfony 命令行工具
├── config/ # 配置文件目录
│ ├── packages/ # 各种包的配置文件
│ ├── routes/ # 路由定义文件
│ ├── bundles.php # 注册的 bundles
│ ├── services.yaml # 服务配置
│ └── ... # 其他配置文件
├── public/ # 公共目录,包含入口文件 index.php
├── src/ # 源代码目录
│ ├── Application/ # 应用层
│ ├── Domain/ # 领域层
│ ├── Infrastructure/ # 基础设施层
│ ├── UI/ # 用户界面层
│ └── Kernel.php # 项目启动文件
├── templates/ # Twig 模板文件
├── tests/ # 测试文件目录
├── translations/ # 翻译文件目录
├── var/ # 生成的缓存和日志文件
└── vendor/ # Composer 依赖包
2. 项目的启动文件介绍
项目的启动文件是 src/Kernel.php
,这个文件是 Symfony 应用的核心,负责初始化应用环境、加载配置、注册 bundles 等。以下是 Kernel.php
的基本结构:
namespace App;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\DependencyInjection\Loader\ConfigLoader;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
use Symfony\Component\Routing\RouteCollectionBuilder;
class Kernel extends BaseKernel
{
use MicroKernelTrait;
public function registerBundles(): iterable
{
$contents = require $this->getProjectDir().'/config/bundles.php';
foreach ($contents as $class => $envs) {
if ($envs[$this->environment] ?? $envs['all'] ?? false) {
yield new $class();
}
}
}
protected function configureContainer(ConfigLoader $loader, ContainerBuilder $container): void
{
$loader->load($this->getProjectDir().'/config/services.yaml');
$loader->load($this->getProjectDir().'/config/packages/*.yaml');
$loader->load($this->getProjectDir().'/config/packages/'.$this->environment.'/*.yaml');
}
protected function configureRoutes(RouteCollectionBuilder $routes): void
{
$routes->import($this->getProjectDir().'/config/routes.yaml');
}
}
3. 项目的配置文件介绍
项目的配置文件主要位于 config/
目录下,以下是一些关键配置文件的介绍:
config/bundles.php
:注册应用中使用的 bundles。config/services.yaml
:定义应用的服务容器配置。config/packages/
:包含各种包的配置文件,如framework.yaml
、doctrine.yaml
等。config/routes.yaml
:定义应用的路由配置。
例如,config/services.yaml
文件的基本结构如下:
services:
_defaults:
autowire: true
autoconfigure: true
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
这些配置文件共同构成了 Symfony 应用的基础配置,确保应用能够正确运行和扩展。