مكتبة توجيه URL المستقلة وسهلة الاستخدام وقابلة للتوسيع وسهلة الفهم في PHP Web Application URL ، تزيد من مجموعة أدوات التطوير الخاصة بك أو قدمت مصدر إلهام بعض الشيء لك.
قم بتنزيل رمز المصدر ومكان الموقع الصحيح لدليل المشروع الخاص بك.
احصل على مثيل كائن جهاز التوجيه
use RouterOne Router ;
$ router = Router:: getInstance (); قم بإنشاء خريطة الطريق في ملف واحد وتقع في dir محدد من prject الخاص بك ، في الملف $this الرجوع إلى مثيل كائن concrete $router . بالنسبة إلى أفعال طلب HTTP ، فإن دعم RouteOne فقط ، GET POST قم بالتوافق فقط مع $ _get & $ _post ، تمتد تمامًا إذا كنت تريد أو ضرورية.)
على سبيل المثال ، Foo.php . يمكن لـ Routerone دعم ملفات خريطة الطريق المتعددة ، مثل frontend_route_map.php ، backend_route_map.php ،.
// Closure function call
$ this -> get ( ' / ' , function () {
echo ' Hello! RouterOne ' ;
});
// `WelcomeController::hello()` call
$ this -> get ( ' / ' , [WeclomeController::class, ' hello ' ]);
اضبط مسار دليل ملف خريطة الطريق وتحميله. (امتداد ملف خريطة الطريق هو .php )
$ router -> setIncludePath (` YOUR_ROUTE_MAP_FILE_DIR `);
$ router -> load ([ ' Foo ' ]); // Just file's name without extensionأو اتصل مثل هذا
$ router -> setIncludePath (` YOUR_ROUTE_MAP_FILE_DIR `)-> load ([ ' Foo ' ]); // Just file's name without extensionRun Dispatch وتمكين جميع الطرق المحملة ، سيتم إرجاع النتيجة حول المسار الذي يسمى بالفعل.
$ res = $ router -> dispatch ();عمل مسار وحدة التحكم:
// Http GET
$ this -> get ( ' index ' , [ Controllers SiteController::class, ' index ' ]);
// Http POST
$ this -> post ( ' news/add ' , [ Controllers NewsController::class, ' add ' ]);عمل إغلاق مسار:
// Http GET
$ this -> get ( ' index ' , function () {
/**
* Some logic process code here
*/
});
// Http POST
$ this -> post ( ' news/add ' , function () {
/**
* Some logic process code here
*/
}); مع معلمات الطريق ، سيتم نقل المعلمات الديناميكية مع {} ملفوفة ، ثم سيتم نقلها إلى طريقة وحدة التحكم أو paramter وظيفة clousre حسب ترتيب المظهر.
$ this -> get ( ' test/{param1}/{param2} ' , [ Controllers TestController::class, ' params ' ]);
class TestController
{
public function params ( $ param1 , $ param2 )
{
// Some code ...
}
} $ this -> get ( ' test/{param1}/{param2} ' , function ( $ param1 , $ param2 ) {
// Some code
}); يجب أن تكون البرامج الوسيطة تنفيذًا لـ RouteMiddleWareInterface ، يمكنك تحديد موقع ملف الفئة المتوسطة في الدليل التعسفي ، مثل MiddleWare Dir ؛
تحتوي فئة متوسطة الأوسط النموذجية على طريقة handle() مع معلمة عمل- $action ، مثل أدناه:
use RouterOne MiddleWare RouteMiddleWareInterface ;
class AuthCheckMiddleWare implements RouteMiddleWareInterface
{
public static function handle ( $ action )
{
if ( ! AdminUser::Logged) {
exit ( ' Please login first. ' );
}
$ action ();
}
} في بعض الحالات ، قد ترغب في القيام ببعض العمليات بعد إبعاد الإجراء ، ما عليك سوى وضع منطق الاتصال المتوسط وراء $action() .
use RouterOne MiddleWare RouteMiddleWareInterface ;
class AfterMiddleWare implements RouteMiddleWareInterface
{
public static function handle ( $ action )
{
$ action ();
echo ' This text will print after route action excuted. ' ;
}
} عند تعريفها في منتصف الطريق ، ويمكنه من خلال طرق تحديد طريقة middleware() من خلال جهاز التوجيه ، على النموذج grouped ، يحتوي middleware() على معلمتين ، والأول هو صفيف اسم فئة middle-ware ودعم المزيد من الأدوات الوسطى هنا ، والآخر تشمل وظيفة الإغلاق رسم خرائط مشتركة للمسار.
$ this -> middleware (
[
AuthCheckMiddleWare::class,
...
. . .
], function () {
$ this -> get ( ' admin/index ' , [ Controllers Admin AdminController::class, ' index ' ]);
$ this -> get ( ' admin/news/list ' , [ Controllers Admin NewsController::class, ' list ' ]);
. . .
. . .
}); أيضا يمكن أن nested
$ this ->middleware(
[
OuterMiddleWare::class,
], function () {
. . .
$ this ->middleware([
InnerMiddleWare::class
], function () {
$ this ->get(...
$ this ->post(...
. . .
});
...
. . .
}); طريقة prefix() واللاحقة suffix() هي طرق grouped أيضًا ، يمكنها إضافة بادئة عملية واحتفال لمادة محددة.
أضف البادئة static/ ، ثم عناوين URL ': // domain/static/page1' ، '// domain/static/page2'
$ this -> prefix ( ' static/ ' , function () {
$ this -> get ( ' page1 ' , ...);
$ this -> get ( ' page2 ' , ...);
. . .
}); أضف preifx the ، ثم عناوين URL ': // domain/thepage1' ، '// domain/thepage2'
$ this -> prefix ( ' the ' , function () {
$ this -> get ( ' page1 ' , ...);
$ this -> get ( ' page2 ' , ...);
. . .
}); مثل prefix() باستخدام ، أضف لاحقة .html ، ثم يتغير عنوان URL إلى ': //domain/page1.html'.
$ this -> suffix ( ' .html ' , function () {
$ this -> get ( ' page1 ' , ...);
. . .
. . .
}); بين prefix() suffix() يمكن أن nested بعضها البعض.
$ this -> prefix ( ' static/ ' , function () {
$ this -> get ( ' page1 ' , ...); // request url '://domain/static/page1' matched here
. . .
$ this -> suffix ( ' .html ' , function () {
$ this -> get ( ' page2 ' , ...); // request url '://domain/static/page2.html' matched here
});
}); إذا كان التطبيق الخاص بك يحتوي على مجال URL متعددة ، فاستخدم طريقة domain() يمكن أن يميز هذه المجال وتوجيه الطلب إلى مجموعة الطريق المقابلة.
$ this -> domain ( ' www.hereisyoursite.com ' , function () { // PC Pages
$ this -> get ( ' index ' , ...);
. . .
});
$ this -> domain ( ' m.hereisyoursite.com ' , function () { // Mobile Pages
$ this -> get ( ' index ' , ...);
. . .
});
$ this -> domain ( ' new.hereisyoursite.com ' , function () { // Current Domain routes
$ this -> get ( ' index ' , ...);
. . .
});
$ this -> domain ( ' old.hereisyoursite.com ' , function () { // Legacy Domain routes
$ this -> get ( ' index ' , ...);
. . .
});