كيفية بناء نظام توجيه جانب الخادم الأساسي في PHP.

اتخذها آرون سيكيسامبو

في سياق تطبيق ويب من جانب الخادم ، يعد نظام التوجيه هو جزء من تطبيق الويب الذي يعين طلب HTTP لمعالج الطلبات (الوظيفة / الطريقة). يتكون طلب HTTP من رأس واختياريا نصيا. يحتوي الرأس على معلومات حول الطلب على سبيل المثال الطريقة والمسار والمضيف. بعض الطرق مثل GET و HEAD و OPTIONS لا تستخدم نص الطلب بينما تستخدمه طرق أخرى مثل POST و PUT و PATCH لتمرير البيانات من عميل إلى خادم.

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

يعمل نظام التوجيه عن طريق تعيين طلب HTTP إلى معالج طلب بناءً على طريقة الطلب والمسار المحدد في عنوان URL للطلب. هذا هو بالضبط ما سنبنيه في هذا البرنامج التعليمي.

المتطلبات.

  • تحتاج PHP الإصدار 5 أو أعلى تعمل على آلة التطوير الخاصة بك.
  • معرفة PHP الأساسية بما في ذلك الإلمام بمتغيرات PHP العالمية.
  • فهم وجوه المنحى PHP.

تنصل.

  • سيقوم هذا الموجه بمعالجة طلبات GET و POST فقط.
  • لن أستخدم الأدوات والمكتبات الفاخرة. لا ملحن ، لا التحميل التلقائي. أريد أن أبقي التركيز على المفهوم.
  • اختبار الوحدة رائع ، لكنني لن أفعل ذلك ، لغرض الحفاظ على هذا البرنامج التعليمي قصيرًا. (آسف المطورين جيدة)
  • الرمز الذي سأكتبه ليس رمزًا جاهزًا للإنتاج.

هيا نبدأ.

باستخدام المحطة ، قم بإنشاء مجلد للمشروع وقرص مضغوط في المجلد.

$ mkdir php-router
قرص مدمج php

قم بإنشاء 4 ملفات في المجلد كما هو موضح أدناه.

$ touch index.php Request.php IRequest.php Router.php

index.php - هذا هو ملف الإدخال لتطبيق الويب. هذا هو المكان الذي سنقوم فيه بتهيئة جهاز التوجيه وتحديد طرقنا. كما يجب أن يحتوي على جميع الواردات.

Request.php - سيحتوي هذا الملف على فئة لفئة الطلب لتهيئة الكائنات التي تحتوي على معلومات حول طلب HTTP.

IRequest.php - سيحتوي هذا الملف على الواجهة التي يجب أن تطبقها فئة الطلب.

Router.php - سيحتوي هذا الملف على فئة التوجيه.

قبل كتابة جهاز التوجيه ، نحتاج إلى تصميم واجهة برمجة التطبيقات (كيفية استخدامها في التطبيقات). أدناه هو API لجهاز التوجيه خارج.

جهاز التوجيه $ = جهاز التوجيه الجديد ؛
// كيف سيتم تحديد طلبات GET
$ router-> get ('/ some / route' ، وظيفة (طلب $)) {
    // وسيطة طلب $ من رد الاتصال
    / / سوف يحتوي على معلومات حول الطلب
    إرجاع "المحتوى" ؛
})؛
// كيف سيتم تحديد طلبات POST
$ router-> post ('/ some / route'، function ($ request) {
    // كيفية الحصول على البيانات من نص الطلب
    $ body = $ request-> getBody ()؛
})؛

الآن وقد حددنا كيفية استخدام جهاز التوجيه الخاص بنا ، فلننشئه.

إنشاء فئة الطلب.

أولاً ، قم بتعريف الواجهة التي ستطبقها فئة الطلب الملموسة. في IRequest.php قم بتعريف واجهة IRequest.

يسترد getBody () البيانات من نص الطلب. يجب أن يكون لدى فئة الطلب التطبيق لهذه الطريقة.

إنشاء فئة الطلب.

في المُنشئ ، قم باستدعاء bootstrapSelf () - وهي الطريقة التي تحدد كل المفاتيح في صفيف $ _SERVER العام كخصائص لفئة الطلب وتعيين قيمها أيضًا. هذا الأسلوب يجعل استدعاء الأسلوب toCamelCase ().

تحويل الأسلوب toCamelCase () سلسلة من حالة ثعبان إلى حالة الإبل.

getBody () هو تطبيق الأسلوب المحدد في واجهة IRequest.

إنشاء فئة التوجيه.

في Router.php ، أضف التعليمات البرمجية التالية لجهاز التوجيه.

في مُنشئ فئة التوجيه ، احتفظ بالإشارة إلى التبعية - كائن الطلب.

دعنا نستخدم طريقة PHP السحرية __call (). يتم تشغيل هذه الطريقة عند استدعاء الأساليب التي يتعذر الوصول إليها في سياق كائن.

النظر في عينة رمز أدناه.

نحن نحاول استدعاء الأسلوب get () الذي لم يتم تعريفه في الفصل Router ، وبالتالي يتم تشغيل الأسلوب السحري __call (). يتلقى حجتين. الوسيطة الأولى هي اسم الطريقة (‘get’) والثانية عبارة عن مجموعة من الوسائط التي تم استدعاء طريقة get () بها ، بمعنى: [’/ '، الدالة () {}].

نستخدم الأسلوب السحري __call () لإنشاء صفيف اقتران بشكل حيوي يعين طرق إعادة الاتصال. نقوم بإنشاء واحد لكل طريقة طلب مدعوم. إذا تم استدعاء طريقة غير صالحة على كائن جهاز التوجيه ، فإننا نرد باستخدام طريقة 405 غير مسموح بها.

تحدد طريقة العزم () رد اتصال يتم الاتصال به للتعامل مع الطلب بناءً على طريقة HTTP ومسار الطلب (‘/ '،’ / foo / bar' ، إلخ).

الآن بعد أن أصبح لدينا جهاز التوجيه الخاص بنا ، فلنستخدمه لإنشاء تطبيق.

إنشاء تطبيق.

في index.php ، قم باستيراد فئتي الطلب والتوجيه التي حددناها ، وقم بتهيئة جهاز التوجيه وتحديد بعض المسارات.

قم بتشغيل واختبار التطبيق يدويًا.

دعنا نستخدم خادم تطوير PHP لتشغيل التطبيق على المنفذ 8000.

أثناء وجودك في الجهاز ، أدخل القرص المضغوط في مجلد المشروع وقم بتشغيل الأمر التالي.

php -S 127.0.0.1:8000

افتح متصفح الويب الخاص بك وانتقل إلى http: // localhost: 8000 / و http: // localhost: 8000 / profile لاختبار الصفحات الرئيسية وصفحة الملف الشخصي.

استخدم Postman أو curl (أو أي أداة أخرى من اختيارك) لاختبار مسار POST إلى http: // localhost: 8000 / profile.

هنا لقطة من اختباري باستخدام ساعي البريد.

وظيفة / البيانات يعملإرجاع DELETE / data 405 الطريقة غير مسموح بها

افكار اخيرة.

يحتوي PHP حاليًا على دعم رديء لطرق HTTP التي تسمح بإرسال البيانات في نص الطلب ، بخلاف POST (أي PUT أو DELETE أو PATCH أو ما إلى ذلك).

يجب عليك استخدام php: // input (دفق إدخال للقراءة فقط) لقراءة البيانات الأولية من نص الطلب ، ثم تحليل البيانات إلى أزواج ذات قيمة مفتاح.

هل تحتاج إلى توظيف كبار المطورين؟ التحدث إلى أنديلا لمساعدتك في ذلك.