"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > البرامج الوسيطة في الليث: كيف تعمل وكيفية إنشاء برامجك الخاصة

البرامج الوسيطة في الليث: كيف تعمل وكيفية إنشاء برامجك الخاصة

تم النشر بتاريخ 2024-11-08
تصفح:433

Middleware in Lithe: How It Works and How to Create Your Own

توفر البرامج الوسيطة آلية ملائمة لفحص وتصفية طلبات HTTP التي تدخل تطبيقك. على سبيل المثال، يتضمن Lithe برمجيات وسيطة تتحقق من مصادقة المستخدم. إذا لم يكن الأمر كذلك، فسوف تقوم البرمجيات الوسيطة بإعادة توجيه المستخدم إلى شاشة تسجيل الدخول. إذا تمت مصادقة المستخدم، فإن البرنامج الوسيط يسمح بمواصلة الطلب.

كيف تعمل الوسيطة في Lithe

في Lithe، البرامج الوسيطة هي وظائف تتمتع بإمكانية الوصول إلى كائن الطلب ($req)، وكائن الاستجابة ($res)، والدالة $next في دورة استجابة الطلب للتطبيق. الدالة $next، عند استدعائها، تستدعي البرنامج الوسيط التالي في المكدس الحالي.

توفر وظائف البرامج الوسيطة طريقة ملائمة لفحص طلبات HTTP الواردة إلى تطبيقك وتصفيتها ومعالجتها. يمكنهم:

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

إذا لم ينهي البرنامج الوسيط الحالي دورة الاستجابة للطلب، فيجب عليه استدعاء $next() لتمرير التحكم إلى البرنامج الوسيط التالي. وبخلاف ذلك، سيظل الطلب معلقًا.


عناصر وظيفة الوسيطة

يوضح الكود التالي عناصر وظيفة البرنامج الوسيط:

$app->use(function ($req, $res, $next) {
    $next();
});

أين:

  • $req: وسيطة طلب HTTP، تسمى تقليديًا $req.
  • $res: وسيطة استجابة HTTP، ويُطلق عليها تقليديًا اسم $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 على بناء برامج وسيطة قوية من خلال توفير واجهة موحدة للطلب والاستجابة، مما يجعل التطوير أكثر كفاءة وتنظيمًا. يؤدي هذا إلى تبسيط عملية دمج البرامج الوسيطة الخاصة بك في المشاريع الأخرى ويضمن أن التعليمات البرمجية تتبع معايير متسقة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/lithephp/middleware-in-lithe-how-it-works-and-how-to-create-your-own-3h67?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3