Рубрики
Uncategorized

Исключения Laravel: захват, обработка и создание

Автор оригинала: David Wong.

Многие разработчики сталкиваются с исключениями в процессе разработки, и процесс во многом один и тот же: захват, а затем обработка, и на самом деле это так. Но в этой статье не предполагается слишком много говорить о принципах ошибок и аномалий, а только из laravel Автономный Исключение Начните с того, как лучше справляться с сообщениями об ошибках.

ненормальный

Давайте начнем с простого примера. ларавель Если одна Модель Если вы не можете найти или не делаете этого, легко создать исключение. Упс, что-то пошло не так И так далее. Это просто в APP_DEBUG=false В этом случае это не дает пользователям больше полезной информации.

User::findOrFail(1);

findOrFail Метод Модель Если нет, он покажет: Извините, страница, которую вы ищете, не найдена. 。 Это один из 404 Страницы с ошибками всегда должны возвращаться таким образом, если мы хотим узнать больше полезной информации?

попробуй…поймай

Мне также нравится использовать его в своей работе. попробуйте поймать Чтобы справиться с исключениями, которые могут возникнуть, также рекомендуется это сделать. Преимущество состоит в том, чтобы вовремя улавливать непредсказуемые ошибки и предоставлять пользователям лучший опыт. Обычный демонстрационный Следующим образом

    try {
        $user = User::findOrFail(1);
    } catch (ModelNotFoundException $exception) {
        return back()->withError($exception->getMessage())->withInput();
    }

Мы можем сделать то же самое:

if (! User::find(1)) {
    throw new UserNotFoundException('...', 404);
}

Пользовательское исключение

Laravel Фреймворк позволяет нам настраивать исключение Выполнение заказов

php artisan make:exception UserNotFoundException

Система автоматически попадет в Исключения Создайте каталог Исключение UserNotFoundException Класс, этот класс наследует Исключение Это дает нам возможность играть свободно.

namespace App\Exceptions;

use Exception;

class UserNotFoundException extends Exception
{
    public function render($request, $e) 
    {
        if ($request->expectsJson()) {
            // If it's an Ajax request...
        }
        
        return redirect()->to('...');
    }
}

Ненормальность суждения

пребывание Исключения Среднее Handle.php В документе мы видим один. Метод render () , вот где мы оцениваем пользовательские исключения

// Handle.php
if ($exception instanceof UserNotFoundException) {
   return $exception->render($exception, $request);
}

Как вы можете видеть, нам просто нужно определить, является ли вызванное исключение UserNotFoundException Примеров достаточно. Находясь в классе UserNotFoundException , мы также можем настроить формат возвращаемых данных и код состояния и так далее. В своей работе я лично предпочитаю создавать некоторые пользовательские классы исключений, которые также будут хорошо управляться.