دورة حياة تطبيق Laravel (Laravel Life Cycle)
في هذه المقالة نمر خطوة بخطوة على <strong>دورة حياة الطلب داخل إطار عمل Laravel</strong> — من وصول الطلب إلى الخادم وحتى عودة الاستجابة للمتصفح. فهم هذه الدورة مهم جداً لأي مطور Laravel لأنّه يوضح أين ولماذا تعمل الأشياء (مثل الـ middleware، الـ providers، والـ controllers).
استقبال الطلب — public/index.php
كل طلب HTTP يمر أولاً عبر ملف public/index.php
الذي يحمل الـ autoloader ويبدأ التطبيق عن طريق استدعاء الـ Kernel. هنا يتم إعداد الـ Application container وتحميل الـ service providers.
تحميل الخدمة (Service Providers)
قبل وصول الطلب للـ Router، تُحمّل Service Providers المسجَّلة في config/app.php
. الـ providers تقوم بتسجيل الخدمات، إعدادات الحاوية (IoC container)، وربط الواجهات بالتنفيذات.
الـ HTTP Kernel و الـ Middleware
يُمرر الطلب إلى App\Http\Kernel
الذي يطبق Middleware العالمية وMiddleware الخاص بالـ route. الـ middleware يمكنه تعديل الطلب، التحقق من الصلاحيات، عمل ضبط (throttling)، وغيرها.
الـ Router وتطابق الـ Route
بعد تجاوز الـ middleware الأولي، يطابق الـ Router المسار مع القواعد في routes/web.php
أو routes/api.php
. إن تم العثور على تطابق يُستدعى الـ Controller أو Closure المعرّف.
Controller / Action
الـ Controller يستلم الطلب ويطبّق منطق التطبيق: استدعاء Services، Validation، التعامل مع الملفات، وغيرها. هنا أيضاً يمكن استدعاء الأحداث (Events) أو إرسال وظائف إلى الطابور (Jobs).
Model و Eloquent
عندما يحتاج التطبيق لبيانات يُستخدم Eloquent أو Query Builder للتفاعل مع القاعدة. نماذج Eloquent تمثل الجداول وتوفّر طرق سهلة للاستعلام والعلاقات.
توليد Response
بعد تجهيز البيانات، يقوم الكود بإرجاع Response
— قد يكون View (HTML)، JSON، Redirect، أو Download. الـ Response يمر مرة أخرى عبر الـ middleware (المخرجات) ثم يُرسَل إلى الخادم ليعود للمستخدم.
مثال مبسّط للتدفق (pseudo-code)
// public/index.php
$app = require __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle($request = Illuminate\Http\Request::capture());
// ... يمر عبر middleware -> router -> controller -> model
$response->send();
$kernel->terminate($request, $response);
نقاط مهمة للمطورين
- Service Providers: مكان تسجيل الخدمات وتهيئة الحزم.
- Middleware: مناسب لمهام متكررة مثل المصادقة والتحقق ومراقبة الأداء.
- Service Container: استخدم الـ dependency injection بدلاً من الـ facades عندما تريد اختبار أسهل.
- Events & Listeners: استخدمها لفصل المسؤوليات (decoupling) وإرسال المهام إلى الطابور.
- Caching: وضع الكاش في الطبقات المناسبة يقلل طلبات DB ويُسرّع الأداء.
خلاصة
دورة حياة الطلب في Laravel مرتبة وواضحة: استقبال الطلب ← تحميل الخدمات ← middleware ← router controller ← model/DB ← response ←. بمعرفة كل نقطة تستطيع تحسين الأداء، كتابة اختبارات أفضل، وتصميم تطبيقات أقوى