Структура шаблона Yii2 (Clean Architecture + DDD)
Данный шаблон представляет собой основу для построения веб-приложений на Yii2 с использованием принципов чистой архитектуры, предметно-ориентированного проектирования (DDD) и CQRS. Он включает готовую инфраструктуру для документирования API (Swagger), обработки ошибок, базовых DTO и расширяемых контроллеров.
Назначение
Шаблон предоставляет:
- Модульную структуру с явным разделением на слои (presentation, application, domain, infrastructure).
- Готовую интеграцию с Swagger/OpenAPI для генерации документации API.
- Пакет
doctordanila/script-docдля отображения проектной документации (Markdown) через веб-интерфейс. - Пакет
doctordanila/scancoreдля работы с контекстом и статистикой проекта. - Кастомный обработчик ошибок (
JsonErrorHandler), возвращающий единообразные JSON-ответы. - Базовый контроллер (
BaseController) с методами для формирования стандартных ответов (item, collection, success, error). - Набор DTO для унификации форматов ответов.
- Заготовку для кастомной идентификации пользователя (
YiiIdentity).
Структура каталогов
├── .env.example # Пример переменных окружения
├── .gitignore # Исключения Git
├── .scancoreignore # Исключения для статического анализатора (ScanCore)
├── codeception.yml # Конфигурация Codeception (тесты)
├── commands/ # Консольные команды (Yii)
├── composer.json # Зависимости и скрипты
├── config/ # Конфигурационные файлы приложения
│ ├── console.php # Конфигурация консольного приложения
│ ├── db.php # Подключение к БД (из .env)
│ ├── ignore_routes.php # Список маршрутов, не требующих аутентификации (для beforeRequest)
│ ├── migration_namespaces.php # Пространства имён для миграций
│ ├── modules.php # Конфигурация модулей приложения
│ ├── params.php # Параметры приложения (email, sender и т.п.)
│ ├── test.php # Конфигурация для тестового окружения
│ ├── test_db.php # БД для тестов (переопределяет db.php)
│ ├── web.php # Основная конфигурация веб-приложения
│ └── __autocomplete.php # Подсказки для IDE (автодополнение)
├── core/ # Ядро приложения (чистая архитектура)
│ ├── application/ # Прикладной слой (команды, запросы, хендлеры, DTO, UseCase)
│ │ ├── command/ # CQRS команды
│ │ ├── dto/ # Data Transfer Objects (CollectionDto, ErrorDto, ItemDto, SuccessDto)
│ │ ├── handler/ # Обработчики команд/запросов
│ │ ├── port/ # Интерфейсы портов (например, репозиториев)
│ │ ├── query/ # CQRS запросы
│ │ └── useCase/ # Сценарии использования (интерфейсы)
│ ├── domain/ # Доменный слой (сущности, события, исключения, value objects)
│ │ ├── entity/ # Доменные сущности
│ │ ├── event/ # Доменные события
│ │ ├── exception/ # Доменные исключения
│ │ └── valueObject/ # Value Objects (например, IdRange)
│ ├── infrastructure/ # Инфраструктурный слой (реализации репозиториев, клиентов, обработчики)
│ │ ├── event/ # Реализации шины событий
│ │ ├── handler/ # JsonErrorHandler (кастомный обработчик ошибок)
│ │ ├── http/ # HTTP-клиенты и конфигурация
│ │ ├── jwt/ # JWT-компоненты
│ │ ├── listener/ # Слушатели событий
│ │ ├── migrations/ # Миграции БД
│ │ ├── persistence/ # Реализации репозиториев (Doctrine, Active Record и т.п.)
│ │ └── repository/ # Реализации репозиториев
│ ├── presentation/ # Презентационный слой (контроллеры, Swagger, представления)
│ │ ├── controller/ # BaseController, DocsController, SwaggerController
│ │ ├── swagger/ # Аннотации для Swagger (info, parameters, schemas)
│ │ └── view/ # Шаблоны представлений (например, для Swagger UI)
│ └── security/ # Компоненты безопасности (YiiIdentity)
├── docker-compose.yml # Конфигурация Docker (PHP 7.4 Apache)
├── docs/ # Проектная документация (Markdown)
│ └── script-yii-template/ # Описание используемого шаблона фреймворка
├── modules/ # Модули приложения (расширения, боты, админки)
├── requirements.php # Проверка требований окружения
├── Vagrantfile # Конфигурация Vagrant (для локальной разработки)
├── web/ # Публичная директория (DocumentRoot)
│ ├── .htaccess # Правила перезаписи (URL)
│ ├── assets/ # Публичные ассеты (CSS, JS, изображения)
│ ├── css/ # Стили (включая кастомный swagger.css)
│ ├── favicon.ico
│ ├── index-test.php # Точка входа для тестов
│ ├── index.php # Точка входа для веб-приложения
│ └── robots.txt
├── yii # Скрипт для консольных команд (Linux)
└── yii.bat # Скрипт для консольных команд (Windows)
Принципы
- Чистая архитектура - зависимости направлены внутрь: presentation → application → domain, infrastructure реализует порты.
- DDD - бизнес-логика сосредоточена в доменных сущностях и value objects.
- CQRS - разделение команд (запись) и запросов (чтение).
- Модульность - каждый модуль (в
modules/) может иметь свою структуру и выделяться в микросервис.