andy87 / yii2-dnk-base
Base classes for Yii2 DNK flow architecture.
Requires
- php: >=8.0
- yiisoft/yii2: ^2.0.45
Requires (Dev)
- phpunit/phpunit: ^9.6
This package is auto-updated.
Last update: 2026-04-28 20:28:56 UTC
README
Базовые классы для Yii2-проектов, следующих DNK flow:
Controller -> Handler -> Service -> (Repository | Producer | Killer)
Установка
Основной способ установки — через Packagist:
composer require andy87/yii2-dnk-base:^0.1
Для установки текущей ветки разработки:
composer require andy87/yii2-dnk-base:dev-master
Базовые классы
andy87\yii2dnk\domain\BaseDomain— реестр домена и маппинг действий.andy87\yii2dnk\controllers\handlers\BaseWebControllerиBaseConsoleController— создают payload и handler через реестр домена.andy87\yii2dnk\domain\BaseHandler— выполняет payload, создаёт привязанную view-model и диспетчеризирует use case вprovider().andy87\yii2dnk\domain\BaseService— создаёт объекты repository, producer, killer и data provider через реестр домена (все getter-ы кэшируют экземпляр).andy87\yii2dnk\domain\BaseRepository— помощники чтения и запросов:findById(),findOrFail(),exists(),count(),queryForGrid().andy87\yii2dnk\domain\BaseProducer— помощники создания runtime-моделей, новых ActiveRecord и search model.andy87\yii2dnk\domain\BaseKiller— помощники жёсткого и опционального мягкого удаления.andy87\yii2dnk\BasePayload— входные данные действия.andy87\yii2dnk\BaseModel— базовая ActiveRecord-модель с константамиATTR_*и дефолтнымиattributeLabels().andy87\yii2dnk\viewModels\BaseViewModel— выходные данные действия.andy87\yii2dnk\viewModels\BaseResource— базовый resource для API/REST-ответов.andy87\yii2dnk\viewModels\BaseTemplateResource— базовый resource для web-view сTEMPLATE.andy87\yii2dnk\viewModels\crud\BaseIndexResource,BaseFormResource,BaseCreateResource,BaseUpdateResource,BaseViewResource— готовые CRUD resources для Gii-like views.andy87\yii2dnk\DomainAwareTrait— trait для автоматического определения класса домена по имени класса.andy87\yii2dnk\ModelClassTrait— trait для получения класса ActiveRecord-модели из реестра домена.andy87\yii2dnk\controllers\handlers\ControllerDomainTrait— общие методы getHandler()/getPayload() для web/console контроллеров.andy87\yii2dnk\domain\BaseActiveDataProvider— базовый builderActiveDataProviderдля list/index сценариев.andy87\yii2dnk\domain\BaseQueryStorage— базовый класс хранилища нативных SQL-запросов.andy87\yii2dnk\interfaces\SearchModelInterface— маркерный интерфейс для search-моделей.andy87\yii2dnk\exceptions\DnkException,andy87\yii2dnk\exceptions\ValidationException,andy87\yii2dnk\exceptions\NotFoundException,andy87\yii2dnk\exceptions\ForbiddenException— базовые доменные исключения.DnkExceptionименован так, чтобы избежать конфликта с PHP SPL\DomainException.
Domain registry
Основной registry-flow задаётся через instance-based BaseDomain с protected typed properties:
$model,$handler,$service,$repository,$producer,$killer;- optional
$searchModel,$dataProvider,$queryStorage; - mappings
$payloads,$viewModels; - config overrides
$definitions.
Static methods classes(), definition(), create(), payloadClass(), createPayload(), createViewModel() и связанные lookup methods остаются BC facade и делегируют в static::instance().
Legacy protected const CLASSES, PAYLOADS, VIEW_MODELS остаются только fallback для старого кода. Новый scaffold должен использовать protected typed properties, а не static/const registry.
protected const DOMAIN в Handler, Service, Repository, Producer, Killer, DataProvider, QueryStorage и controller-классах — это только pointer на Domain-класс, не Domain registry и не возврат к static/const registry.
$definitions предназначен для infrastructure config overrides. Top-level $definitions[$key]['class'] запрещён: class registry-объекта берётся из protected property. Вложенный Yii definition внутри значения вроде queryStorage может содержать class.
Ограничения
BaseProducerсоздает runtime-модели, search-модели и новые записи, но не содержит genericupdate(...).BaseActiveDataProvider::search()является abstract contract: конкретный доменный DataProvider реализует Gii-like фильтры.BaseWebController::display(...)покрывает простой HTML/JSON ответ и HTTP status code для JSON. Для redirect, file response и API envelope лучше добавить собственный метод в прикладном controller.runTransactional(...)открывает одну Yii DB transaction. Nested transactions, несколько БД и after-commit hooks не реализованы.
Документация
Полная документация по архитектуре, flow, правилам генерации и шаблонам:
- SKILL/SKILL.md — canonical source правил DNK flow, ответственности слоёв, антипаттернов и scaffold-шаблонов.
- SKILL/reference.md — краткий справочник, ссылается на SKILL/SKILL.md.
- SKILL/CHECKLIST.md — чеклист проверок при работе с DNK.
AI Skill
Пакет поставляется как runtime-библиотека и как AI skill. После установки через Composer skill-файлы доступны в:
vendor/andy87/yii2-dnk-base/SKILL/
Основной файл skill-а:
vendor/andy87/yii2-dnk-base/SKILL/SKILL.md
Проверки
composer check