توفر البرامج الوسيطة آلية ملائمة لفحص وتصفية طلبات HTTP التي تدخل تطبيقك. على سبيل المثال، يتضمن Lithe برمجيات وسيطة تتحقق من مصادقة المستخدم. إذا لم يكن الأمر كذلك، فسوف تقوم البرمجيات الوسيطة بإعادة توجيه المستخدم إلى شاشة تسجيل الدخول. إذا تمت مصادقة المستخدم، فإن البرنامج الوسيط يسمح بمواصلة الطلب.
في Lithe، البرامج الوسيطة هي وظائف تتمتع بإمكانية الوصول إلى كائن الطلب ($req)، وكائن الاستجابة ($res)، والدالة $next في دورة استجابة الطلب للتطبيق. الدالة $next، عند استدعائها، تستدعي البرنامج الوسيط التالي في المكدس الحالي.
توفر وظائف البرامج الوسيطة طريقة ملائمة لفحص طلبات HTTP الواردة إلى تطبيقك وتصفيتها ومعالجتها. يمكنهم:
إذا لم ينهي البرنامج الوسيط الحالي دورة الاستجابة للطلب، فيجب عليه استدعاء $next() لتمرير التحكم إلى البرنامج الوسيط التالي. وبخلاف ذلك، سيظل الطلب معلقًا.
يوضح الكود التالي عناصر وظيفة البرنامج الوسيط:
$app->use(function ($req, $res, $next) { $next(); });
أين:
إليك مثال بسيط على برنامج وسيط يسمى myLogger. تقوم هذه البرامج الوسيطة بطباعة الرسالة المسجلة في كل مرة يمر فيها الطلب. يتم تعريفها على أنها وظيفة مخصصة لمتغير يسمى myLogger:
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
لاحظ استدعاء $next() أعلاه. تستدعي هذه الوظيفة البرنامج الوسيط التالي في التطبيق. $next() ليست وظيفة PHP أو Lithe مدمجة ولكنها الوسيط الثالث الذي تم تمريره إلى وظيفة البرنامج الوسيط. على الرغم من أنه يمكن تسمية $next() بأي شيء، إلا أنه يُطلق عليه دائمًا اسم "التالي". لتجنب الالتباس، التزم بهذه الاتفاقية.
تخيل البرامج الوسيطة كسلسلة من "الطبقات" التي تمر عبرها طلبات HTTP قبل الوصول إلى التطبيق الخاص بك. يمكن لكل طبقة فحص الطلب أو رفضه.
لتحميل البرامج الوسيطة، يمكنك استدعاء طريقة use() للفئة \Lithe\App، مع تحديد وظيفة البرنامج الوسيط. على سبيل المثال:
$app = new \Lithe\App; $myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); }; $app->use($myLogger); $app->get('/', function ($req, $res, $next) { $res->send('Hello World!'); });
عندما يتلقى التطبيق طلبًا، سيتم طباعة الرسالة "تم تسجيل الدخول". ترتيب تحميل البرامج الوسيطة مهم: تلك التي تم تحميلها أولاً يتم تنفيذها أولاً.
يقوم البرنامج الوسيط myLogger ببساطة بطباعة رسالة، ثم يمرر الطلب إلى البرنامج الوسيط التالي باستخدام $next().
يمكن للتطبيق الخفيف استخدام الأنواع التالية من البرامج الوسيطة:
يمكنك إرفاق برامج وسيطة على مستوى التطبيق بمثيل التطبيق باستخدام أساليب use() أو METHOD()، حيث تشير METHOD إلى طريقة HTTP (على سبيل المثال، GET، PUT، POST) بأحرف صغيرة.
يوضح هذا المثال البرامج الوسيطة بدون مسار. يتم تشغيل البرنامج الوسيط في كل مرة يتم فيها تلقي طلب:
$app->use(function ($req, $res, $next) { echo 'Hello World!'; $next(); });
في المثال أدناه، تعالج البرامج الوسيطة طلب GET إلى المسار /user/:id:
$app->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { return $next(); } $res->send('ID is not 0'); }, function ($req, $res) { $res->send('regular'); });
تعمل البرامج الوسيطة على مستوى جهاز التوجيه مثل البرامج الوسيطة على مستوى التطبيق ولكنها مرتبطة بمثيل \Lithe\Http\Router:
$router = new \Lithe\Http\Router;
يمكنك تحميل البرامج الوسيطة على مستوى جهاز التوجيه باستخدام وظائف use() و METHOD().
إليك مثال على البرامج الوسيطة على مستوى جهاز التوجيه:
$router = new \Lithe\Http\Router; $router->use(function ($req, $res, $next) { echo 'Time: ', Date('H:i:s'), '
'; $next(); }); $router->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { $res->redirect('/'); } $next(); }, function ($req, $res) { echo $req->param('id'); $res->render('special'); }); $app->use('/api', $router);
يمكنك استخدام برامج وسيطة تابعة لجهات خارجية لإضافة وظائف إلى تطبيقات Lithe الخاصة بك. قم بتثبيت وحدة PHP المطلوبة ثم قم بتحميلها على مستوى التطبيق أو جهاز التوجيه.
إليك مثال لتحميل البرامج الوسيطة للجلسة باستخدام \Lithe\Middleware\Session\session:
use function Lithe\Middleware\Session\session; $app = new \Lithe\App; $app->use(session([ 'secure' => true ]));
للحصول على قائمة بالبرامج الوسيطة التابعة لجهات خارجية شائعة الاستخدام مع Lithe، تحقق من مورد البرامج الوسيطة التابعة لجهات خارجية.
إذا كنت تريد أن تكون برمجيتك الوسيطة قابلة للتكوين، فيمكنك إنشاء وظيفة تقبل مجموعة من الخيارات أو المعلمات الأخرى ثم تقوم بإرجاع تنفيذ البرنامج الوسيط بناءً على تلك المعلمات. انظر المثال أدناه:
الآن، يمكنك استخدام البرنامج الوسيط مع التكوينات المخصصة:
$app->use(my_middleware(['option1' => '1', 'option2' => '2']));لإنشاء برامج وسيطة يمكن للمطورين الآخرين تثبيتها عبر Composer، توجد حزمة تسمى lithemod/flow. فهو يوفر واجهات وأدوات مساعدة للتعامل مع طلبات HTTP والاستجابات في Lithe، مما يسهل إنشاء برامج وسيطة موحدة وجاهزة للاستخدام عبر التطبيقات المختلفة.
يساعدlithemod/flow على بناء برامج وسيطة قوية من خلال توفير واجهة موحدة للطلب والاستجابة، مما يجعل التطوير أكثر كفاءة وتنظيمًا. يؤدي هذا إلى تبسيط عملية دمج البرامج الوسيطة الخاصة بك في المشاريع الأخرى ويضمن أن التعليمات البرمجية تتبع معايير متسقة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3