Структура шаблона Yii2 (Clean Architecture + DDD)

Данный шаблон представляет собой основу для построения веб-приложений на Yii2 с использованием принципов чистой архитектуры, предметно-ориентированного проектирования (DDD) и CQRS. Он включает готовую инфраструктуру для документирования API (Swagger), обработки ошибок, базовых DTO и расширяемых контроллеров.

Назначение

Шаблон предоставляет:

Структура каталогов

├── .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)

Принципы