Какую структуру класса использовать для собственных исключений? Всем привет! Пишу общий класс для запросов из API и WEB. Мне нужно сделать так, чтобы для WEИ отдавались одни номера ошибок, а для API другие... Я полагаю, что мне нужно использовать некие константы, которые класс должен отдать в случае ошибки, а уже в местах, где этот класс вызывается, сопоставлять константы ошибок и необходимым номером ошибки и уже его отдавать клиенту.
Подскажите как это правильно сделать? Просто делать исключение в классе типа: throw new \FirstClassException("INVALID_TOKEN");
А уже в файле где этот класс вызывается оборачивать код в что-то подобное:try{
// тут работа с классом, где предполагаются исключения типа FirstClassException
}catch(FirstClassException $e){
switch($e->getMessage()){
case 'INVALID_TOKEN':
$response->setError("Не верный токен", 101);
break;
//.... перечисление вчех вариантов ошибок
}
}
Мне кажется, что логика верная, но вот такая строка мне не нравится: throw new \FirstClassException("INVALID_TOKEN");
Вероятно, должно быть как-то красивее.

21 Авг 2019 в 07:00
228 +1
1
Ответы
1

Вам действительно нужно использовать собственные исключения для различных типов ошибок, чтобы упростить обработку и передачу информации об ошибке. Для этого вы можете создать базовый класс исключения, который будет являться родительским для всех ваших собственных исключений.

Примерно так:

class CustomException extends Exception {}
class ApiException extends CustomException {
const INVALID_TOKEN = 101;
const SOMETHING_ELSE = 102;
}
class WebException extends CustomException {
const PAGE_NOT_FOUND = 201;
const ACCESS_DENIED = 202;
}
// В вашем классе для запросов
class MyApiClass {
public function makeRequest() {
// Логика запроса
// В случае ошибки
throw new ApiException("INVALID_TOKEN");
}
}
// В месте вызова класса
try {
$api = new MyApiClass();
$api->makeRequest();
} catch (CustomException $e) {
switch ($e->getMessage()) {
case ApiException::INVALID_TOKEN:
$response->setError("Не верный токен", ApiException::INVALID_TOKEN);
break;
case ApiException::SOMETHING_ELSE:
$response->setError("Другая ошибка", ApiException::SOMETHING_ELSE);
break;
// Другие ваши обработки ошибок
}
}

Таким образом, вы можете детально контролировать типы ошибок и передавать соответствующие коды ошибок для API и WEB запросов. Код будет более читаемым и поддерживаемым.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир