دورة حياة الطلب (Request Lifecycle) في Laravel

من موسوعة حسوب
اذهب إلى: تصفح، ابحث

مقدمة

عندما تفهم كيفية عمل أدوات تطويرك تزداد راحتك وثقتك عند استخدامها. تطوير التطبيقات لا يشذ عن هذه القاعدة.

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

نظرة عامة عن دورة الحياة

أول شيء

نقطة الدخول لكل طلبات تطبيقات Laravel هو الملف public/index.php. تُوجَّه اعدادات خادم الويب (Apache أو Nginx) كل الطلبات نحو هذا الملف. لا يحتوي الملف index.php على كثيرٍ من التعليمات البرمجية؛ إلا أنَّه نقطة بداية لبقية إطار العمل.

يُحمِّل الملف index.php تعريف التحميل التلقائي autoloader الذي يُولِّده Composer، ثم يعقبه بجلب نسخ من تطبيق Laravel من سكريبت bootstrap/app.php. أول فعل يقوم به Laravel نفسه هو إنشاء نسخة من التطبيق / حاوي الخدمات (service container).

نُوىHTTP / الطرفية (HTTP / Console Kernels)

بعدها يرسل الطلب القادم إما لنواة HTTP أو لنواة الطرفية حسب نوع الطلب الذي يدخل التطبيق. تعمل النواتان كموقع مركزي تمر عبره كل الطلبات. حاليا فلنركز فقط على نواة HTTP  الموجودة في app/Http/Kernel.php. تشتق نواة HTTP الصنف Illuminate\Foundation\Http\Kernel، الذي يُعرِّف مصفوفة من العمليات التمهيدية (bootstrappers)  تُشَغَّل قبل تنفيذ الطلب، والتب ستُعِّد عمليات معالجة الأخطاء، وسجل الولوج، رصد بيئة التطبيق والقيام مهمات أخرى يتوجب إتمامها قبل الشروع في معالجة الطلب.

تُعرِّف نواة الHTTP أيضًا قائمة من البرمجيات الوسيطة (middleware) التي تستلزم مرور كل الطلبات عبرها قبل أن يعالجها التطبيق. تتولى هذه البرمجيات الوسيطة كتابة وقراءة جلسات HTTP sessions) HTTP، وتقرير إن كان التطبيق في نمط الصيانة (maintenance mode)، والتحقق من رمز CSRF، والمزيد. توقيع الدالة لدالة نواة handle HTTP بسيط جدًا: إذ تتلقى طلبًا Request  وتعيد ردًا Response. تخيل النواة كصندوق أسود كبير يمثل كامل تطبيقك. تمده بطلبات HTTP وسيعيد لك إجابات HTTP.

مقدمو الخدمات

تحميل مقدمي الخدمات من أجلك هي من أهم أفعال عمليات النواة التمهيدية لتطبيقك. كل مقدمي الخدمات لتطبيقك مُعدُّات في ملف الإعدادات config/app.php وتحديدًا في مصفوفة providers. بداية، ستُنادى الدالة register على كل مقدمي الخدمات، بعدها عندما يُسَجَّل كل المقدمين ستُنادى الدالة boot.

مقدمو الخدمات مسؤولون عن تمهيد كل مكونات إطار العمل مثل قاعدة البيانات، والطابور، والتحقق (validation)، ومكونات التوجيه. مقدمو الخدمات أهم جانب من عملية التمهيد في Laravel كاملة بما أنهن يشغلن ويعددن كل خاصية يوفرها إطار العمل.

إرسال الطلب (Dispatch Request)

لحظة إنهاء تمهيد التطبيق و تسجيل كل مقدمي الخدمات، يُسَلَّم Request لجهاز التوجيه (router) للإرسال. يرسل جهاز التوجيه الطلب لمسار (route) أو وحدة تحكم (controller) كما يُشَغِّل أي برمجيات وسيطة خاصة بالمسار.

التركيز على مقدمي الخدمات

مقدمو الخدمات هن فعلًا مفتاح تمهيد التطبيق Laravel.أولا تُنشَئ نسخة من التطبيق، تُسَجَّل مقدمو الخدمات، وأخيرا  يُسَلَّم الطلب للتطبيق المُمَهَّد. الموضوع بسيط جدا! امتلاك فهم راسخ لكيفية بناء وتشغيل Laravel عبر مقدمي الخدمات قيم جدًا. مقدمو الخدمات مخزَّنات افتراضيًا في المجلَّد app/Providers.

مبدئيًا، المقدم AppServiceProvider فارغ إلى حد ما. يمثل هذا المقدم مكانًا ممتازًا لإضافة ارتباطات (bindings) عملية التمهيد (bootstrapping) و حاويات خدمات تطبيقك. للتطبيقات الضخمة قد ترغب في إنشاء عِدَّة مقدمي خدمات، كل واحدة بمستوى أكثر بساطة من التمهيد.  

مصادر