запуском транзакции обратился к auth()->user()->id, будучи неавторизованным). Try-catch словил ошибку, роллбэкнул БД и вернул $exception->getMessage().
Но куда вернул? Если посмотреть в контроллер, там все прошло гладко, меня перекинуло на books.index с сообщением. А запись в бд не добавилась. Потому что нет никакой проверки того, что сервис вернул в контроллер.
Как это обработать?
Просто ддшнуть сообщение ошибки в сервисе - херня. Можно вернуть результат работы сервиса в переменную, а потом проверить, что она instanceof Book, оттуда уже плясать. Есть ли какие-то лучшие варианты?
опять же могу тебя в книгу Аделя отправить, он там тоже про это писал. если кратко, то ты можешь возвращать условный false, что будет означать ошибку, но это не удобно, поэтому приходится усложнять и возвращать какой-то класс, например, Error. либо возвращать false, а Error (сообщение) брать с какого-то метода сервиса отдельно, как это в валидаторе сделано. а более простой и удобный вариант - это кидать свои эксепшены и где надо их отлавливать, в твоем случае - в контроллере (или глобально) и решать, что ты скажешь пользователю.
Обсуждают сегодня