عند بدء مشروع Laravel جديد، تكون معالجة الأخطاء والاستثناءات مُكوَّنة مسبقاً لك. فئة App\Exceptions\Handler هي المكان الذي يتم فيه تسجيل جميع الاستثناءات التي يرميها تطبيقك ثم تُصيَّر مرة أخرى إلى المستخدم.
التكوين
يحدد خيار debug في ملف تكوين config/app.php مقدار المعلومات حول الخطأ التي يتم عرضها للمستخدم. بشكل افتراضي، يتم تعيين هذا الخيار ليحترم قيمة متغير البيئة APP_DEBUG:
APP_DEBUG=true # للتطوير
APP_DEBUG=false # للإنتاجالإبلاغ عن الاستثناءات
يُستخدم الإبلاغ عن الاستثناءات لتسجيل الاستثناءات أو إرسالها إلى خدمة خارجية مثل Sentry أو Flare. بشكل افتراضي، يتم تسجيل الاستثناءات بناءً على تكوين التسجيل الخاص بك.
// bootstrap/app.php
use App\Exceptions\InvalidOrderException;
->withExceptions(function (Exceptions $exceptions) {
$exceptions->report(function (InvalidOrderException $e) {
// منطق الإبلاغ المخصص
});
})إيقاف الإبلاغ عن أنواع معينة
->withExceptions(function (Exceptions $exceptions) {
$exceptions->dontReport([
InvalidOrderException::class,
]);
})تصيير الاستثناءات
بشكل افتراضي، سيحول معالج استثناءات Laravel الاستثناءات إلى استجابة HTTP لك. ومع ذلك، يمكنك تسجيل إغلاق تصيير مخصص للاستثناءات من نوع معين:
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (InvalidOrderException $e, Request $request) {
return response()->view('errors.invalid-order', [], 500);
});
})استجابات JSON للـ API
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (InvalidOrderException $e, Request $request) {
if ($request->expectsJson()) {
return response()->json([
'error' => 'طلب غير صالح',
'message' => $e->getMessage(),
], 500);
}
});
})استثناءات HTTP
تصف بعض الاستثناءات أكواد أخطاء HTTP من الخادم. يمكنك إنشاء استجابات مخصصة لأكواد حالة HTTP محددة:
abort(404);
abort(403, 'غير مصرح');صفحات أخطاء مخصصة
أنشئ عروض مخصصة لصفحات الأخطاء:
<!-- resources/views/errors/404.blade.php -->
@extends('layouts.app')
@section('content')
<h1>الصفحة غير موجودة</h1>
<p>عذراً، الصفحة التي تبحث عنها غير موجودة.</p>
@endsectionاستثناءات التحقق
عندما يفشل التحقق، يرمي Laravel تلقائياً ValidationException:
$validated = $request->validate([
'email' => 'required|email',
'password' => 'required|min:8',
]);تعرف على المزيد حول معالجة الأخطاء في Laravel من التوثيق الرسمي.
الخاتمة
توفر معالجة الأخطاء في Laravel طريقة أنيقة وموحدة للتعامل مع الاستثناءات في تطبيقك. من خلال تخصيص معالج الاستثناءات، يمكنك التحكم في كيفية الإبلاغ عن الأخطاء وتصييرها للمستخدمين.
برمجة سعيدة مع Laravel 11!