rinvent/exception

面向文件系统的异常

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

This package is auto-updated.

Last update: 2024-09-04 11:26:06 UTC


README

  • 这个异常存储实现是面向文件系统的。
  • 需要将异常文件放在 Exception 目录下。
  • 还需要在包含所有可能值的公共枚举中注册新的异常。
  • 这可以自动计算错误字符串和数值代码。
  • 此外,这种做法还规定了异常处理的规则,这将使异常的存储和使用更加纯净。
// Текстовый код ошибки.
// Калькулируется по расположению в файловой системе.
// Нужен, чтобы завязать на него систему переводов
$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