@durden_tailer

Ошибки с помощью Exception или строки?

Доброго времени суток!
Хочу поделиться опытом разработки на PHP/Laravel.

Создал бэкенд для мобильного приложения с json API.
Использую "вместо исключений" почти везде возвращаемые(return) конструкции вида:
[ data => [... тут какие-то данные], 'status' => 'ok' ] либо
[ data => [], 'status' => 'error', 'message' => 'Текст ошибки'].

Логика почти везде получилась линейная и простая, но иногда довольно большое кол-во операций с разными случаями исхода.

Пробовал кастомизировать исключения и выкидывать их вместо [ data => [], 'status' => 'error' ], но
иногда нужно слишком много кастомных исключений обработать, а это много try-catch, try-finally.

Хочу спросить совета и опыта использования лучших практик Laravel/PHP - делал ли кто-то подобные консепты (велосипеды с квадратными и треугольными колесами)?

Вцелом, выброс исключений смотрится "эстетичнее" в коде. Но это скорее, дело привычки и стиля.
Вообще без них сложно. Слишком много - тоже плохо.
  • Вопрос задан
  • 405 просмотров
Решения вопроса 1
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
Конечно же в коде нужно использовать исключения. И в тестировании они проще и это просто логично! Если вы используете типизацию в php и вам должен возвратиться объект City, то возвращая строку или массив вы получите ошибки. Тут без исключений уже не обойтись. Поэтому, если вы хотите писать код правильно - вам нужно использовать в домене только исключения!

А try-catch можно инкапсулировать в коде, если не нравится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Alex_Wells
@Alex_Wells
PHP/Kotlin
Дополню ответ Максим :

В своих проектах я всегда начинаю с того, что пишу какой-то базовый Exception, типа AppException, который всегда ловится Exception Handler'ом и отдает инфу юзеру. Он же висит в списке $dontReport, так как это всегда ожидаемая мной ошибка, о которой я не хочу быть уведомленным.

Собственно если я хочу, что бы ошибка попала в логи, потому что такой ситуации не должно быть - обычные встроенные эксепшены типа AssertionError, IllegalArgument, LogicException и так далее. Если не хочу - AppException и наследованые от нее.

Тогда почти везде в контроллерах пропадают try-catch'и за счет exception handler'а.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы