أولاً، سنقوم بإنشاء ملفات Index.php وrouter.php و.htaccess.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
سيظهر هذا الرمز استجابة 404 إذا أدخل المستخدم عنوان url للوصول إلى router.php مباشرة.
إضافة فئة الصفحة في router.php
class Page { protected static bool $Return_404 = true; }قم بإنشاء متغير منطقي ثابت لإرجاع صفحة 404. سوف نقوم بتعيينه على صحيح كافتراضي.
الآن نضيف وظيفة لصفحة 404.protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); }هنا قمت بوضع صفحة 404 داخل مجلد الصفحات. يمكنك وضعه في أي مجلد تريده
سنضيف أيضًا وظيفة "الملف".
protected static function File(string $file): string { if (!empty($file)) { (str_contains($file, "?")) ? $file = strtok($file, '?') : $file; ($file[strlen($file) - 1] === "/") ? $file = rtrim($file, "/") : $file; } return $file; }ستقوم هذه الوظيفة بالتحقق مما إذا كان عنوان URL للطلب يحتوي على سلسلة استعلام أو ينتهي بـ "/" وإزالته.
أستخدم دالة السلسلة "السكتة الدماغية" للحصول على قيم السلسلة قبل "؟". أعلم أن "السكتة الدماغية" ليس من المفترض استخدامها بهذه الطريقة ولكنها تعمل وتنقذني من القيام بخوارزميات معقدة دون داع. أستخدم وظيفة السلسلة "rtrim" لإزالة "/" إذا كانت موجودة في آخر السلسلة.إضافة فئة الطرق في router.php
class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }هنا، أقوم بإنشاء مصفوفة ثابتة لتخزين التوجيهات.
تحتوي هذه المصفوفة على "عنوان URL المطلوب" => "موقع الملف".
أضع كافة ملفات الصفحة في مجلد الصفحات. يمكنك وضعها في أي مكان تريد.أضف فئة جهاز التوجيه في router.php
ستمتد فئة جهاز التوجيه من فئة الصفحة التي أنشأناها بالفعل أعلاه.
لاحظ أن "" => "Pages/home.php"، مخصص للصفحة الرئيسية.class Router extends Page { }الآن، سنكتب الدالة التي تتحقق من وجود الملف المطلوب في فئة جهاز التوجيه.
public static function Run(): void { $requested_file = self::File($_SERVER["REQUEST_URI"]); foreach (Routes::$Route as $request => $file) { if ($requested_file === $request) { if (file_exists($file)) { self::$Return_404 = false; require $file; } else echo "Error"; } } if (self::$Return_404) self::Return_404(); }تقوم هذه الوظيفة بالتحقق من وجود الملف المطلوب في مصفوفة $Route أولاً. إذا كان موجودًا، فسيتم تعيين القيمة المنطقية الثابتة $Return_404 على false حتى لا تظهر صفحة 404 ولا تحصل على ملف الصفحة. إذا لم يكن موجودًا، فسيؤدي ذلك إلى إرجاع صفحة 404.
إذا كان موجودًا ولكن لا يوجد ملف في مجلد الصفحات، فستقوم الوظيفة بتكرار "خطأ". يمكنك عرض صفحة 404 بدلاً من صدى "خطأ" هنا.سيبدو ملف router.php النهائي بهذا الشكل.
$file) { if ($requested_file === $request) { if (file_exists($file)) { self::$Return_404 = false; require $file; } else echo "Error"; } } if (self::$Return_404) self::Return_404(); } } class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }الفهرس.php
في ملف Index.php، سنستخدم وظيفة "Run" من فئة جهاز التوجيه.
Router ستكون كافة أكواد HTML من الصفحات موجودة في علامة "النص الأساسي".
إنشاء صفحات
أخيرًا، قم بإنشاء home.php، وabout.php، و404.php في مجلد الصفحات.
home.php
Home page
about.php
about page
404.php
404 page
تحقق مما إذا كان الرمز يعمل أم لا باستخدام ملحق "xampp" أو "خادم PHP".
إذا واجهت أي خطأ، فلا تتردد في إخباري. XD
يمكنك أيضًا التحقق من مستودع جيثب على:
توكيجين / جهاز توجيه الصفحة
جهاز توجيه يدوي من مستودع php-router
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3