Какую структуру класса использовать для собственных исключений? Всем привет! Пишу общий класс для запросов из 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
213 +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 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир