انتقل إلى محتوى الدرس
الدرس 21
دورة إطار العمل Laravel

إنشاء وتسجيل البرمجيات الوسيطة Middleware في LaravelCreating and Registering HTTP Middleware in Laravel

فحص وتصفية الطلبات عبر البرمجيات الوسيطة Middleware وتسجيلها في ملف bootstrap/app.php وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تمثل البرمجيات الوسيطة Middleware طبقات فحص متتالية يمر عبرها طلب HTTP قبل وصوله إلى المتحكم وكذلك تمر عبرها الاستجابة قبل عودتها للمتصفح. تُستخدم هذه الطبقات لتنفيذ مهام مشتركة مثل التحقق من الصلاحيات أو ضبط لغة الواجهة أو إضافة رؤوس أمنية.

  • نموذج الطبقات المتتالية (Onion Pipeline): يمر الطلب عبر كل طبقة بالترتيب وصولاً للمتحكم ثم يعود كاستجابة.
  • الإيقاف المبكر للطلب (Short-Circuit): يمكن للبرمجية الوسيطة إرجاع تحويل أو خطأ فوراً دون تشغيل المتحكم.
  • منع تكرار الكود (Reusable Filters): تفصل منطق الفحص المشترك عن دوال المتحكمات الأساسية.
مخطط معماري يوضح إنشاء وتسجيل البرمجيات الوسيطة Middleware في Laravel في إطار العمل Laravel 12
PHP
<?php
// Conceptual Middleware Pipeline:
// Incoming Request
//   -> MaintenanceModeMiddleware
//     -> SetLocaleMiddleware
//       -> Controller Action
// <- Outgoing HTTP Response

يمكنك توليد كلاس برمجية وسيطة جديد داخل مجلد app/Http/Middleware باستخدام أمر php artisan make:middleware. يحتوي الكلاس على دالة أساسية هي handle تستقبل كائن الطلب ودالة الإغلاق $next لتمرير الطلب للطبقة التالية أو إيقافه.

  • التوليد عبر Artisan (make:middleware): ينشئ هيكل الكلاس الجاهز داخل مجلد app/Http/Middleware.
  • دالة التمرير (Closure $next): استدعاء $next($request) ينقل الطلب إلى البرمجية الوسيطة التالية أو المتحكم.
  • عقد الاستجابة (Response Return): يجب أن تُرجع دالة handle دائماً كائن استجابة صالحاً.
PHP
<?php
use Closure;
use Illuminate\Http\Request;

public function handle(Request $req, Closure $next)
{
    return $next($req);
}

تُصنف البرمجية الوسيطة حسب موقع تنفيذ الكود بالنسبة لاستدعاء $next($request) إلى برمجية قبلية أو بعدية. تنفذ البرمجية القبلية فحصها قبل وصول الطلب للمتحكم، بينما تلتقط البرمجية البعدية كائن الاستجابة أولاً لتعديله أو إضافة رؤوس الرسالة إليه.

  • البرمجية القبلية (Before Middleware): تفحص الطلب الوارد أولاً وقد تمنعه من الوصول للمتحكم.
  • البرمجية البعدية (After Middleware): تنتظر انتهاء المتحكم واستلام الاستجابة ثم تعدلها قبل إرسالها للمتصفح.
  • إرفاق الرؤوس الأمنية (Response Headers): تُعد البرمجية البعدية المكان المثالي لإضافة رؤوس الحماية للاستجابات.
PHP
<?php
// After Middleware pattern inside handle():
public function handle(Request $req, Closure $next)
{
    $response = $next($req);
    $response->headers->set('X-Frame-Options', 'DENY');
    return $response;
}

في إصداري Laravel 11 و12، تم الاستغناء عن ملف Kernel.php القديم وأصبح تسجيل البرمجيات الوسيطة يتم مركزياً داخل دالة withMiddleware في ملف bootstrap/app.php. يمكنك من هناك إضافة برمجية عامة لكل الطلبات أو تعريف أسماء مستعارة مختصرة عبر دالة alias.

  • التسجيل المركزي (bootstrap/app.php): تُدار جميع البرمجيات الوسيطة داخل دالة withMiddleware الحديثة.
  • التنفيذ الشامل ($middleware->append): يضيف البرمجية الوسيطة لتعمل تلقائياً مع كل طلب يدخل للتطبيق.
  • الأسماء المستعارة ($middleware->alias): يربط اسماً نصياً قصيراً بكلاس البرمجية الوسيطة لتسهيل استدعائه على المسارات.
PHP
<?php
// In bootstrap/app.php:
->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'open' => EnsureStoreIsOpen::class,
    ]);
})

بعد تعريف البرمجية الوسيطة، يمكنك تطبيقها على مسار مفرد أو مجموعة مسارات عبر دالة middleware، مع إمكانية تمرير معاملات إضافية بعد نقطتين رأسيتين. ولإعفاء مسار فرعي داخل مجموعة من برمجية وسيطة مطبقة على المجموعة، استخدم دالة withoutMiddleware.

  • الربط بالمسارات والمجموعات (->middleware): يطبق البرمجية الوسيطة بالاسم المستعار أو باسم الكلاس المباشر.
  • تمرير المعاملات (Middleware Params): تُمرر القيم المكتوبة بعد النقطتين الرأسيتين كمعامل ثالث لدالة handle.
  • الاستثناء الانتقائي (withoutMiddleware): يستثني مساراً محدداً من برمجية وسيطة مفروضة على مجموعته.
PHP
<?php
use Illuminate\Support\Facades\Route;

Route::middleware(['store.open'])->group(function () {
    Route::get('/checkout', fn () => view('checkout'));
    Route::get('/status', fn () => 'Open')
        ->withoutMiddleware(['store.open']);
});

يساعد تنظيم فلاتر الطلبات في كلاسات برمجيات وسيطة مستقلة على إبقاء المتحكمات نظيفة وتركيز قواعد الوصول في ملف التهيئة. راجع الجدول التالي لاختيار نطاق التسجيل الأنسب لكل برمجية وسيطة في مشروعك.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحميمعيار Laravel 12 الحديث
الفحوصات المتكررةنسخ نفس جملة الشرط في بداية عشرات الدوال داخل المتحكماتفصل الفحص في كلاس Middleware واحد وربطه بمجموعة المسارات
موقع التسجيلالبحث عن ملف Kernel.php القديم الذي أُلغي في الإصدارات الحديثةالتسجيل المركزي النظيف عبر withMiddleware في bootstrap/app.php
تخصيص قواعد الفحصإنشاء عدة كلاسات مكررة لكل صلاحية أو خطة اشتراكتمرير المعاملات الديناميكية للبرمجية مثل middleware('role:editor')
رؤوس الاستجابة الموحدةإرفاق الرؤوس الأمنية يدوياً في نهاية كل دالة متحكمبرمجية وسيطة بعدية واحدة تضيف الرؤوس لكافة الاستجابات تلقائياً
PHP
<?php
// Passing parameter 'pro' to handle($req, $next, $tier)
Route::get('/export', [ReportController::class, 'run'])
    ->middleware('plan:pro');
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «إنشاء وتسجيل البرمجيات الوسيطة Middleware في Laravel» مفاهيم آلية عمل أنبوب البرمجيات الوسيطة، وتوليد كلاس برمجية وسيطة مخصص، والبرمجيات الوسيطة القبلية والبعدية وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «استجابات HTTP وإعادة التوجيه والكوكيز في Laravel» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 HTTP Middleware البرمجيات الوسيطة
فحص وتصفية الطلبات عبر البرمجيات الوسيطة Middleware وتسجيلها في ملف bootstrap/app.php وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
للمراجعة
02 How HTTP Middleware Pipeline Works آلية عمل أنبوب البرمجيات الوسيطة
المفهوم الهندسي والتطبيق العملي المباشر لقسم آلية عمل أنبوب البرمجيات الوسيطة في إطار العمل Laravel 12.
للمراجعة
03 Generating Custom Middleware Classes توليد كلاس برمجية وسيطة مخصص
المفهوم الهندسي والتطبيق العملي المباشر لقسم توليد كلاس برمجية وسيطة مخصص في إطار العمل Laravel 12.
للمراجعة
04 Before Versus After Request Middleware البرمجيات الوسيطة القبلية والبعدية
المفهوم الهندسي والتطبيق العملي المباشر لقسم البرمجيات الوسيطة القبلية والبعدية في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «آلية عمل أنبوب البرمجيات الوسيطة» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «توليد كلاس برمجية وسيطة مخصص» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من آلية عمل أنبوب البرمجيات الوسيطة في إطار العمل Laravel 12؟

يسهم آلية عمل أنبوب البرمجيات الوسيطة في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «توليد كلاس برمجية وسيطة مخصص» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة البرمجيات الوسيطة القبلية والبعدية بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة البرمجيات الوسيطة القبلية والبعدية.

04

لماذا يُعد تطبيق تسجيل البرمجيات الوسيطة بملف التطبيق مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق تخصيص البرمجيات الوسيطة للمسارات في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص نطاقات تسجيل البرمجيات الوسيطة؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.