Правильный способ обработки исключений

Что я обычно делаю, когда пишу код,

function changeBookAuthor(int $id, string $newName){
if(!$newName){
throw new MyAppException('No author name was provided');
}

$book = Books::find($id);

if(!$book){
throw new MyAppException('The provided book id could not be found');
}
}

в документе Laravel мы видим:

https://laravel.com/docs/5.4/errors

public function report(Exception $exception)
{
if ($exception instanceof CustomException) {
//
}

return parent::report($exception);
}

Теперь, как правильно обработать исключение? все они одно и то же исключение, и у них нет ни кода. Должен ли я предоставить код ошибки?

проблема с исключением php заключается в том, что они используют целые числа. Это довольно раздражает имхо. Лучше было бы 'changeauthor_bookid_notfound' как код, а не случайное число. Должен ли я создать класс исключения для каждого отдельного исключения? например не использовать повторно MyAppException это кажется немного утомительным. У меня было бы триллион классов.

Теперь, если для особого исключения я хочу особой обработки, с моим кодом, я не могу легко сделать это. У меня нет кода для проверки (например, $exception->code == 3331 then do special) и у меня нет пользовательских классов исключений, ни

Каков хороший и надежный способ справиться с этим делом?
код, новый класс на каждую ошибку, что-то еще все вместе?

и если предоставить код, каков хороший способ сделать это?

0

Решение

«Правильный» способ сделать это — определить либо собственный класс Exception для каждого исключения, либо определить пользовательские исключения, основанные на типе генерируемой ошибки, однако следует понимать, что Laravel уже имеет много встроенных исключений и механизмов для обработки варианты использования вы обрисовали в общих чертах.

Например, в случае исключения «Книга не найдена» вместо того, чтобы вручную инициировать исключение, вы можете использовать Books::findOrFail($id); который бросает экземпляр ModelNotFoundException когда уместно.

Кроме того, в PHP нет необходимости обрабатывать исключения для необоснованных аргументов. Если это явно не указано как необязательный, требуются все аргументы метода, и Laravel выдает исключение PHP, если аргумент отсутствует.

Кроме того, Laravel предоставляет abort() магический метод, который выдает ошибку HTTP вместе с пользовательским сообщением об ошибке и может использоваться следующим образом:

abort(418, "I'm a teapot...")

Таким образом, если вам необходимо заново изобрести колесо, правильный способ — определить пользовательские классы исключений и определить пользовательские обработчики для этих классов, но при этом следует понимать, что в Laravel уже есть много встроенных инструментов для управления исключениями без необходимости делать это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector