الكتابات/tutorial/2024/06
Tutorial15 يونيو 2024·10 دقيقة

11 أساسيات Laravel 11: معالجة الأخطاء

تعلم أساسيات معالجة الأخطاء في Laravel 11، بما في ذلك تكوين معالج الاستثناءات والتقارير والتصيير.

عند بدء مشروع 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!