guyliangilsing / php-abstract-router
一个简单的包,为您提供无框架依赖的路由器。
1.1.1
2022-06-14 21:28 UTC
Requires (Dev)
- nunomaduro/phpinsights: ^2.2
- phpunit/phpunit: 9.5
This package is auto-updated.
Last update: 2024-09-15 02:43:09 UTC
README
一个简单的包,为您提供无框架依赖的路由器。
目录
这究竟是什么?
PHPAbstractRouter 是一个无框架依赖的路由器,允许您手动定义路由或通过属性定义。使用此包的人需要提供实际的路由后端。后端可以是框架(如 slim 4),或者真正的路由器(如 FastRoute)。
安装
$ composer require guyliangilsing/php-abstract-router
使用
手动定义路由
您可以通过 Router
类手动定义路由
use use PHPAbstractRouter\HTTP\Router;; $routeRegisterer = // Your bridge class... $router = new Router($routeRegisterer); $router->get('/', MyController::class,'renderIndex'); $router->get('/about', MyController::class, 'renderAbout');
通过属性定义路由
您可以在类内部通过属性定义您的路由
use PHPAbstractRouter\HTTP\Attributes\GET; use PHPAbstractRouter\HTTP\Attributes\Group; use PHPAbstractRouter\HTTP\Attributes\POST; #[Group('/test')] final class MyController { #[GET('/')] public function renderIndex(): string { return "index.php"; } #[POST('/')] public function indexPOST(): string { return "POST index.php"; } #[GET('/about')] public function renderAbout(): string { return "about.php"; } #[POST('/about')] public function aboutPOST(): string { return "POST about.php"; } }
定义完您的路由后,您可以让 RouterFacade
收集它们
use use PHPAbstractRouter\HTTP\Router;; $routeRegisterer = // Your bridge class... $router = new Router($routeRegisterer); $router->fromClass(MyController::class);
定义分组路由
可以通过 GroupRouter
类定义分组路由
use PHPAbstractRouter\HTTP\GroupRouter; use PHPAbstractRouter\HTTP\Router; $dispatcher = // Your custom dispatcher here... $router = new RouterFacade($dispatcher); $router->group('/test', function(GroupRouter $group) { $group->get('', MyController::class, 'renderIndex'); $group->get('/about', MyController::class, 'renderAbout'); });
集成路由后端
要集成您首选的路由后端,您只需实现 BackendRouteRegistererInterface
接口
use PHPAbstractRouter\HTTP\BackendRouteRegistererInterface; final class BackendRouteRegisterer implements BackendRouteRegistererInterface { public function route(HTTPRoute $route): void { // Todo:: Implement your registration logic here... } public function routeGroup(HTTPRouteGroup $group): void { // Todo:: Implement your registration logic here... } }
实现此接口后,您可以通过构造函数将其传递给 Router
类。