- Розуміння основ обробки винятків у Laravel
- Налаштування налагодження
- Звітування про винятки
- Adding Global Context to Logs
- Rendering Exceptions
- Creating Custom HTTP Error Pages
- Using Reportable and Renderable Exceptions
- Throttling Exceptions
- Ignoring Exceptions
- Handling HTTP Exceptions
- Conclusion
Обробка винятків є важливою частиною будь-якої програми, що дозволяє розробникам витончено керувати помилками та забезпечувати безперебійну роботу користувачів. Laravel спрощує цей процес, пропонуючи надійну систему обробки помилок і винятків з коробки. У цьому посібнику ми крок за кроком розглянемо, як використовувати можливості обробки винятків Laravel у зручний для початківців спосіб.
Розуміння основ обробки винятків у Laravel
Laravel поставляється з попередньо налаштованим надійним механізмом обробки помилок і винятків. Це гарантує, що вам не доведеться починати з нуля.
Ядром цієї функціональності є $exceptions об'єкт, що знаходиться у файлі bootstrap/app.php , який керує тим, як винятки повідомляються (реєструються або надсилаються до зовнішнього сервісу) та відображаються (відображаються користувачам).
Налаштування налагодження
Laravel використовує змінну APP_DEBUG у файлі .env для визначення того, скільки інформації про помилки потрібно відобразити:
-
Місцевий розвиток: Встановлено
APP_DEBUG=trueдля відображення докладних повідомлень про помилки. -
Виробництво: Завжди налаштовано
APP_DEBUG=falseтак, щоб уникнути розкриття конфіденційної інформації.
Оновіть файл:.env
APP_DEBUG=true
Звітування про винятки:
Laravel автоматично реєструє винятки на основі конфігурації журналювання. Щоб налаштувати цю поведінку, можна визначити логіку звітування для конкретних винятків.
Приклад: повідомлення про спеціальний виняток
у:bootstrap/app.php
->withExceptions(function (Exceptions $exceptions) {
$exceptions->report(function (InvalidOrderException $e) {
// Custom reporting logic
})->stop();
});
- Використовується
->stop()для запобігання ведення журналу за замовчуванням. - Поверніться
falseв закриття, щоб повністю пропустити ведення журналу.
Додавання глобального контексту до журналів
Щоб зробити журнали більш значущими, ви можете включити контекстні дані:
Глобальний контекст
Визначте глобальні дані, які повинні з'являтися в кожному записі журналу:
у:bootstrap/app.php
->withExceptions(function (Exceptions $exceptions) {
$exceptions->context(fn () => ['user_id' => auth()->id()]);
});
Контекст
, специфічний для винятків: додайте контекст до конкретних винятків, визначивши метод контексту у вашому класі винятку:
public function context(): array
{
return ['order_id' => $this->orderId];
}
Відображення винятків
За замовчуванням Laravel перетворює винятки на відповіді HTTP. Ви можете змінити цю поведінку для певних винятків.
Приклад: користувацький рендеринг для недійсних замовлень
у:bootstrap/app.php
use App\Exceptions\InvalidOrderException;
use Illuminate\Http\Request;
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (InvalidOrderException $e, Request $request) {
return response()->view('errors.invalid-order', [], 500);
});
});
- Метод
renderтакож може обробляти вбудовані винятки, такі якNotFoundHttpException.
Приклад: Для відповідей
API Відтворюйте винятки у форматі JSON:
$exceptions->render(function (NotFoundHttpException $e, Request $request) {
return $request->is('api/*')
? response()->json(['message' => 'Not found'], 404)
: null;
});
Створення користувацьких сторінок
помилок HTTP Laravel дозволяє створювати власні сторінки помилок для різних кодів стану HTTP. Щоб налаштувати сторінку
помилки 404: Кроки для налаштування:
- To customize default error templates, publish them using:
php artisan vendor:publish --tag=laravel-errors - Add your custom content to the
404.blade.phpview:<h2>{{ $exception->getMessage() }}</h2> <p>Sorry, the page you’re looking for doesn’t exist.</p> - Test the page by navigating to a non-existent route.
Ви також можете визначити резервні шаблони для груп помилок, як 4xx.blade.php для всіх помилок 4xx.
Використання звітних та рендерних винятків
Замість глобального визначення звітності та логіки рендерингу, ви можете реалізувати це безпосередньо в користувацьких класах винятків.
Приклад: Клас користувацького винятку
Створіть новий виняток:
php artisan make:exception InvalidOrderException
У App\Exceptions\InvalidOrderException:
namespace App\Exceptions;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class InvalidOrderException extends Exception
{
public function report(): void
{
// Custom reporting logic
}
public function render(Request $request): Response
{
return response()->view('errors.invalid-order', [], 500);
}
}
Винятки
для регулювання Щоб уникнути затоплення журналів повторюваними помилками, Laravel дозволяє обмежувати повідомлені винятки.
Приклад: винятки
у:bootstrap/app.php
use Illuminate\Support\Lottery;
->withExceptions(function (Exceptions $exceptions) {
$exceptions->throttle(fn () => Lottery::odds(1, 1000));
});
- Це гарантує, що реєструється лише один із кожних 1000 ідентичних винятків.
Ігнорування винятків
Ви можете виключити певні винятки, додавши їх до dontReport списку або застосувавши ShouldntReport інтерфейс.
Приклад: додавання винятків до dontReport списку
$exceptions->dontReport([
InvalidOrderException::class,
]);
Приклад: позначення винятків як таких, що не підлягають
namespace App\Exceptions;
use Exception;
use Illuminate\Contracts\Debug\ShouldntReport;
class CustomException extends Exception implements ShouldntReport
{
// ...
}
звітуванню Обробка винятків
HTTP Щоб викликати певні помилки HTTP програмним шляхом, скористайтеся abort допоміжним засобом:
Приклад: спричинити помилку
abort(404, 'Page not found');
404 Висновок
Система обробки винятків Laravel розроблена таким чином, щоб бути гнучкою, дозволяючи розробникам налаштовувати та контролювати звітування про помилки та рендеринг за потреби. Оволодівши цими методами, ви можете бути впевнені, що ваша програма витончено обробляє помилки, зберігаючи при цьому безперебійну взаємодію з користувачем.