Skip to content

feat: стандартные исключения — шаблоны + копирование при init#53

Merged
prikotov merged 5 commits into
masterfrom
task/standard-exceptions-templates
May 22, 2026
Merged

feat: стандартные исключения — шаблоны + копирование при init#53
prikotov merged 5 commits into
masterfrom
task/standard-exceptions-templates

Conversation

@prikotov
Copy link
Copy Markdown
Owner

Что сделано

config/exceptions/ — 16 типовых файлов исключений

Шаблоны с плейсхолдером {{ProjectName}} для namespace.

Интерфейсы (маркеры для catch):

  • ClientErrorExceptionInterface / ServerErrorExceptionInterface — корни иерархии (4xx / 5xx)
  • ValidationExceptionInterface, NotFoundExceptionInterface, ConflictExceptionInterface, AccessDeniedExceptionInterface → ClientError
  • InfrastructureExceptionInterface, ConfigurationExceptionInterface → ServerError
  • DomainExceptionInterface — самостоятельный маркер

Классы:

  • DomainExceptionNotFoundException, AccessDeniedException
  • ValidationException (extends DomainException) → ConflictException
  • InfrastructureException (extends RuntimeException)
  • ConfigurationException (extends LogicException)

Обновлён bin/coding-standard-init

  • Автодетект имени проекта из composer.jsonautoload.psr-4 (корень namespace)
  • --exceptions-path=src/Common/Exception — путь по умолчанию
  • --no-exceptions — пропустить копирование
  • Если корней несколько — ошибка + пропуск

Использование

php vendor/bin/coding-standard-init              # всё автоматически
php vendor/bin/coding-standard-init --no-exceptions  # без исключений

Проверка

  • composer check — все проверки пройдены (PHPUnit, sniff-test, validate-docs, phpcs, phpstan)
  • Протестировано на проекте TasK — namespace Task определился корректно

prikotov added 5 commits May 22, 2026 16:59
- Add config/exceptions/ with 16 template files (9 interfaces + 7 classes)
  using {{ProjectName}} placeholder for namespace
- Update coding-standard-init to auto-detect project name from
  composer.json autoload.psr-4 and copy exceptions with proper namespace
- Add --no-exceptions and --exceptions-path options
- Hierarchy: ClientError/ServerError roots, concrete exceptions extend
  DomainException/ValidationException/RuntimeException/LogicException
…eter

Project name is now explicitly passed via --project-name=Task instead of
fragile auto-detection from composer.json autoload.psr-4.
@prikotov prikotov merged commit 606b3c9 into master May 22, 2026
@prikotov prikotov deleted the task/standard-exceptions-templates branch May 22, 2026 11:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant