Автоматическая генерация компонентов кодов ошибок
Описание
Система может автоматически поддерживать генерацию кодов ошибок на основе заданных правил.
Договоренность о возвращаемом данных параметре code: все пользовательские кодовые значения; положительные числа обозначают нормальное состояние сервиса, отрицательные числа обозначают ненормальное состояние сервиса.
Проект
https://github.com/teamones-open/response-code-msg
Установка
composer require teamones/response-code-msg
Использование
Пустой файл класса ErrorCode
- Путь к файлу ./support/ErrorCode.php
<?php
/**
* Автоматически сгенерированный файл, пожалуйста, не изменяйте его вручную.
* @Author:$Id$
*/
namespace support;
class ErrorCode
{
}
Конфигурационный файл
Коды ошибок будут автоматически увеличиваться на основе параметров, указанных ниже. Например, если текущий system_number = 201, start_min_number = 10000, то первый сгенерированный код ошибки будет -20110001.
- Путь к файлу ./config/error_code.php
<?php
return [
"class" => new \support\ErrorCode(), // Файл класса ErrorCode
"root_path" => app_path(), // Корневая директория текущего кода
"system_number" => 201, // Идентификатор системы
"start_min_number" => 10000 // Диапазон генерации кодов ошибок, например 10000-99999
];
Добавление кода автоматической генерации кодов ошибок в start.php
- Путь к файлу ./start.php
// Поместите после Config::load(config_path(), ['route', 'container']);
// Генерация кодов ошибок, генерируйте только в режиме APP_DEBUG
if (config("app.debug")) {
$errorCodeConfig = config('error_code');
(new \teamones\responseCodeMsg\Generate($errorCodeConfig))->run();
}
Использование в коде
В приведенном ниже коде ErrorCode::ModelAddOptionsError представляет собой код ошибки, где ModelAddOptionsError необходимо написать пользователю с учетом семантики, используя заглавные буквы.
После написания вы обнаружите, что это не может быть использовано. При следующей перезагрузке автоматически сгенерируется соответствующий код ошибки. Обратите внимание, что иногда может понадобиться перезагрузить дважды.
<?php
/**
* Служебный класс, связанный с навигационными операциями
*/
namespace app\service;
use app\model\Demo as DemoModel;
// Импортируйте файл класса ErrorCode
use support\ErrorCode;
class Demo
{
/**
* Добавить
* @param $data
* @return array|mixed
* @throws \exception
*/
public function add($data): array
{
try {
$demo = new DemoModel();
foreach ($data as $key => $value) {
$demo->$key = $value;
}
$demo->save();
return $demo->getData();
} catch (\Throwable $e) {
// Вывод информации об ошибке
throw_http_exception($e->getMessage(), ErrorCode::ModelAddOptionsError);
}
return [];
}
}
Сгенерированный файл ./support/ErrorCode.php
<?php
/**
* Автоматически сгенерированный файл, пожалуйста, не изменяйте его вручную.
* @Author:$Id$
*/
namespace support;
class ErrorCode
{
const LoginNameOrPasswordError = -20110001;
const UserNotExist = -20110002;
const TokenNotExist = -20110003;
const InvalidToken = -20110004;
const ExpireToken = -20110005;
const WrongToken = -20110006;
const ClientIpNotEqual = -20110007;
const TokenRecordNotFound = -20110008;
const ModelAddUserError = -20110009;
const NoInfoToModify = -20110010;
const OnlyAdminPasswordCanBeModified = -20110011;
const AdminAccountCannotBeDeleted = -20110012;
const DbNotExist = -20110013;
const ModelAddOptionsError = -20110014;
const UnableToDeleteSystemConfig = -20110015;
const ConfigParamKeyRequired = -20110016;
const ExpiryCanNotGreaterThan7days = -20110017;
const GetPresignedPutObjectUrlError = -20110018;
const ObjectStorageConfigNotExist = -20110019;
const UpdateNavIndexSortError = -20110020;
const TagNameAttNotExist = -20110021;
const ModelUpdateOptionsError = -20110022;
}