Sebuah pustaka URL Routing PHP Web Routing yang mandiri, dapat diperluas, dan mudah dipahami, saya menambah alat pengembangan Anda atau memberikan sedikit inspirasi untuk Anda.
Unduh kode sumber dan tempatkan lokasi yang tepat dari direktori proyek Anda.
Dapatkan contoh objek router
use RouterOne Router ;
$ router = Router:: getInstance (); Buat peta rute dalam satu file dan terletak di dir spesifik prject Anda, di file $this merujuk ke instance objek $router . Untuk kata kerja permintaan http, RouteOne hanya mendukung, GET POST cukup selaras dengan php's $ _get & $ _post, benar -benar diperpanjang jika Anda mau atau perlu.)
Misalnya, Foo.php . Routerone dapat mendukung beberapa file peta rute, seperti 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 ' ]);
Atur jalur direktori file peta rute & memuatnya. (Ekstensi default file peta rute adalah .php )
$ router -> setIncludePath (` YOUR_ROUTE_MAP_FILE_DIR `);
$ router -> load ([ ' Foo ' ]); // Just file's name without extensionAtau hubungi seperti ini
$ router -> setIncludePath (` YOUR_ROUTE_MAP_FILE_DIR `)-> load ([ ' Foo ' ]); // Just file's name without extensionJalankan pengiriman dan aktifkan semua rute yang dimuat, itu akan mengembalikan hasil tentang rute yang sebenarnya disebut.
$ res = $ router -> dispatch ();Tindakan rute pengontrol:
// Http GET
$ this -> get ( ' index ' , [ Controllers SiteController::class, ' index ' ]);
// Http POST
$ this -> post ( ' news/add ' , [ Controllers NewsController::class, ' add ' ]);Tindakan rute penutupan:
// Http GET
$ this -> get ( ' index ' , function () {
/**
* Some logic process code here
*/
});
// Http POST
$ this -> post ( ' news/add ' , function () {
/**
* Some logic process code here
*/
}); Dengan parameter rute, paramter dinamis dengan {} dibungkus, maka akan ditransfer ke metode pengontrol atau paramter fungsi clousre dengan urutan penampilan.
$ 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
}); Middleware harus menjadi implementasi untuk RouteMiddleWareInterface , Anda dapat menemukan file kelas peralatan menengah di direktori sewenang-wenang, seperti Dir MiddleWare ;
Kelas perlengkapan tengah yang khas berisi metode handle() dengan aksi rute- $action , seperti di bawah ini:
use RouterOne MiddleWare RouteMiddleWareInterface ;
class AuthCheckMiddleWare implements RouteMiddleWareInterface
{
public static function handle ( $ action )
{
if ( ! AdminUser::Logged) {
exit ( ' Please login first. ' );
}
$ action ();
}
} Dalam beberapa kasus Anda mungkin ingin melakukan beberapa proses setelah tindakan rute dikecualikan, cukup letakkan logika perlengkapan tengah di balik pernyataan panggilan $action() .
use RouterOne MiddleWare RouteMiddleWareInterface ;
class AfterMiddleWare implements RouteMiddleWareInterface
{
public static function handle ( $ action )
{
$ action ();
echo ' This text will print after route action excuted. ' ;
}
} Ketika Ware Tengah yang ditentukan, dan dapat melalui rute pengaturan metode middleware() router sebagai bentuk grouped , middleware() memiliki dua parameter, yang pertama adalah array nama kelas middle-ware dan mendukung lebih banyak pertarungan tengah di sini, dan yang lainnya adalah fungsi penutupan termasuk pemetaan rute umum.
$ this -> middleware (
[
AuthCheckMiddleWare::class,
...
. . .
], function () {
$ this -> get ( ' admin/index ' , [ Controllers Admin AdminController::class, ' index ' ]);
$ this -> get ( ' admin/news/list ' , [ Controllers Admin NewsController::class, ' list ' ]);
. . .
. . .
}); Juga bisa nested
$ this ->middleware(
[
OuterMiddleWare::class,
], function () {
. . .
$ this ->middleware([
InnerMiddleWare::class
], function () {
$ this ->get(...
$ this ->post(...
. . .
});
...
. . .
}); Metode prefix() dan suffix() juga grouped rute, mereka dapat dengan mudah menambahkan awalan dan akhiran praktis ke rute tertentu.
Tambahkan awalan static/ , lalu url ': // domain/static/page1', '// domain/static/page2' akan dicocokkan.
$ this -> prefix ( ' static/ ' , function () {
$ this -> get ( ' page1 ' , ...);
$ this -> get ( ' page2 ' , ...);
. . .
}); Tambahkan the , lalu url ': // domain/thepage1', '// domain/thepage2' akan dicocokkan.
$ this -> prefix ( ' the ' , function () {
$ this -> get ( ' page1 ' , ...);
$ this -> get ( ' page2 ' , ...);
. . .
}); Sama seperti prefix() menggunakan, tambahkan akhiran .html , lalu ubah URL menjadi ': //domain/page1.html'.
$ this -> suffix ( ' .html ' , function () {
$ this -> get ( ' page1 ' , ...);
. . .
. . .
}); Antara prefix() dan suffix() dapat saling 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
});
}); Jika aplikasi Anda memiliki beberapa domain URL, gunakan metode domain() dapat membedakan domain ini dan memandu permintaan ke grup rute yang sesuai.
$ 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 ' , ...);
. . .
});