alexpts / php-psr15-routing
支持PSR-7和PSR-15的中间件路由
2.1.0
2018-05-06 07:21 UTC
Requires
- php: ~7.2
- alexpts/php-tools: ^3.1
- psr/http-message: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- phpunit/phpunit: ^7.1
README
安装
composer require alexpts/php-psr15-routing
支持PSR-7, PSR-15的简单路由器
功能
- 从URL中简单捕获参数
- 使用RegExp描述路由
- 灵活的参数分组
- 路由优先级
- 高效率
示例
use PTS\PSR15Routing\CallableAdapter; use PTS\PSR15Routing\Router; use PTS\PSR15Routing\Route; use PTS\PSR15Routing\RouterMiddleware; $router = new Router; $router->add('/', new Route('/', new CallableAdapter(function($request) { return $response; // $response must be ResponseInterface }))); $handler = ...; // $handler bust be RequestHandlerInterface $router->add('/admin', new Route('/', $handler)); // with priority $router->add('/admin/1', new Route('/', $handler), 100); // some middleware manager/runner $app = (new MiddlewareManager) ->push(new RouterMiddleware($router); $response = $app->handler($request);
端点(额外功能)
端点是真实处理路由的包装器。它需要灵活配置真实处理程序,并在运行时获取真实处理程序。
use PTS\PSR15Routing\CallableAdapter; use PTS\PSR15Routing\Router; use PTS\PSR15Routing\Route; use PTS\PSR15Routing\RouterMiddleware; use PTS\EndPoint\DynamicPoint; use PTS\EndPoint\EndPoint; $router = new Router; $flexHandler = new DynamicPoint([ 'prefix' => '\\Namespace\\ForDynamicController\\' ]); $router->add('flex', new Route('/{_controller}/{_action}/', $flexHandler)); // /blog/get/ => \\Namespace\\ForDynamicController\\Blog::get() $mainPageHandler = new EndPoint(['controller' => SomeController::class]); $router->add('mainPage', new Route('/', $mainPageHandler)); // SomeController::index() // with params from url $postHandler = new DynamicPoint([ 'controller' => '\\Project\\PostController', ]); $router->add('posts', new Route('/posts/{_action}/{id}/', $postHandler)); // /posts/get/4/ => PostController::get($id = 4)