echo-fusion / routemanager
一个轻量级且灵活的路由包,帮助管理PHP应用程序中的HTTP路由。支持PSR-7和PSR-15,专为MVC架构和中间件集成设计。
v1.0.0
2024-10-01 12:01 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- psr/http-message: ^2.0@dev
Requires (Dev)
- echo-fusion/codestandard: ^1.0
- friendsofphp/php-cs-fixer: dev-master
- phpunit/phpunit: ^9.5
- vimeo/psalm: 5.x-dev
README
一个轻量级且灵活的路由包,帮助管理PHP应用程序中的HTTP路由。支持PSR-7和PSR-15,专为MVC架构和中间件集成设计。
安装
通过Composer
$ composer require echo-fusion/routemanager
要求
本版本支持的PHP版本如下。
- PHP 8.1
- PHP 8.2
- PHP 8.3
用法
use EchoFusion\RouteManager\Router; use EchoFusion\RouteManager\RouteMatcher\RouteMatcher; $routeMatcher = new RouteMatcher(); $router = new Router($routeMatcher);
初始化路由器后,您可以定义路由,并可选地对路由参数进行正则表达式约束检查。
路由中的操作参数可以是
- 数组 (控制器,方法)
- 闭包
use Psr\Http\Message\ServerRequestInterface; // simple route $router->post( name: 'api.store', path: '/api', action: [ApiController::class, 'store'] ); // route parameter with regex constraints $router->get( name: 'blog-show', path: '/post/{id}/detail/{slug}', action: function(int $id, string $slug, ServerRequestInterface $request) { // write your code here... var_dump($id , $slug); }), constraints: [ 'id' => '[0-9]+', 'slug' => '[a-z0-9\-]+', ] ); // adding multiple route middleware as variadic params $router->post( name: 'register', path: '/register', action: [AuthController::class, 'register'] )->middlewares(GuestMiddleware::class);
如果请求与任何定义的路由匹配,它将返回RouteMatchInterface的实例。
try { $routeMatch = $router->dispatch($request); } catch (RouteNotFoundException $e) { // Handle route not found }
现在,您可以调用控制器并使用给定方法
$action = $routeMatch->getRoute()->getAction(); // Get the route parameters and request $routeParams = $routeMatch->getParams(); $params = array_merge($routeParams, [$request]); // Call the action (callable or controller method) with type hinting return call_user_func_array($action, $params);
测试
测试包括PHPUnit和PHPStan(第7级)。
$ composer test
致谢
由Amir Shadanfar 开发和维护。
在LinkedIn 上联系。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。