Независимая, простой в использовании, расширяемой и простой для понимания библиотеки маршрутизации URL-адреса PHP веб-приложений, MYBE дополняет ваш инструментарий для разработки или немного вдохновляло для вас.
Загрузите исходный код и поместите правильное местоположение вашего каталога проекта.
Получить экземпляр объекта маршрутизатора
use RouterOne Router ;
$ router = Router:: getInstance (); Создайте карту маршрутов в отдельном файле и расположена в конкретном DIR в вашем PRUCTE, в файле $this $router Для глаголов HTTP -запроса, RouteOne Only Support GET , POST (просто выровняйте с PHP $ _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 extensionЗапустите отправку и включите все загруженные маршруты, это будет возвращать результат о фактическом вызове маршрута.
$ 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
*/
}); С параметрами маршрута динамические параметры с оберщенными {} будут переданы на метод контроллера или параметра функции 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 программное обеспечение;
Типичный класс среднего уровня содержит метод handle() с параметрам $action , как ниже:
use RouterOne MiddleWare RouteMiddleWareInterface ;
class AuthCheckMiddleWare implements RouteMiddleWareInterface
{
public static function handle ( $ action )
{
if ( ! AdminUser::Logged) {
exit ( ' Please login first. ' );
}
$ action ();
}
} В некоторых случаях вы можете захотеть сделать какой-то процесс после расширения действий по маршруту, просто поместите логику среднего уровня за $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's 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/ , затем URLS ': // Domain/Static/Page1', '// Domain/Static/Page2' будет сопоставлен.
$ this -> prefix ( ' static/ ' , function () {
$ this -> get ( ' page1 ' , ...);
$ this -> get ( ' page2 ' , ...);
. . .
}); Добавьте the , затем URLS ': // 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 ' , ...);
. . .
});