rinsvent/exception

File system-oriented exception

v1.0.2 2022-11-04 07:09 UTC

This package is auto-updated.

Last update: 2024-04-04 10:28:39 UTC


README

  • Это реализация хранения исключений ориентирована на файловую систему.
  • Нужно класть файлы исключений в директорию Exception.
  • И нужно регистрировать новые исключения в общем enum со списком всех возможных значений.
  • Это позволит автоматически калькулировать строковый и числовой код ошибки.
  • К тому же этот подход диктует правила работы с исключениями, что сделает их хранение и использование более чистым
// Текстовый код ошибки.
// Калькулируется по расположению в файловой системе.
// Нужен, чтобы завязать на него систему переводов
$e->getCodeText(); 

// Числовой код ошибки.
// Калькулируется по позиции в enum.
// Нужен чтобы клиенту было легче сообщить об ошибке
$e->getCode(); 

// Штатное поле. Не менялось
$e->getMessage();

// Здесь getMessage.
// Если он пустой, то текст будет на основе названия исключения. 
$e->getSummary();
use \Rinsvent\Exception\AbstractException;
use \Rinsvent\Exception\CodeTrait;

class DefaultException extends AbstractException {} // psth: src/Exception/DefaultException.php
class AccessDenied extends AbstractException {} // psth: src/Exception/AccessDenied.php
class AlreadyCreated extends AbstractException {} // psth: src/Exception/User/AlreadyCreated.php

enum MyProjectEnum: string implements \Rinsvent\Exception\CodeInterface
{
    use CodeTrait;

    case Default = DefaultException::class;
    case AccessDenied = AccessDenied::class;
    case UserAlreadyCreated = AlreadyCreated::class;
}

// Регистрируем наше хранилище с ошибками
AbstractException::$exceptionEnum = MyProjectEnum::class;

$e = new AlreadyCreated('Your custom message');
$e->getCodeText(); // user.already_created
$e->getCode(); // 200
$e->getMessage(); // Your custom message
$e->getSummary(); // Your custom message

$e = new AccessDenied();
$e->getCodeText(); // access_denied
$e->getCode(); // 100
$e->getMessage(); // ''
$e->getSummary(); // Access denied