alexpts/php-psr15-routing

支持PSR-7和PSR-15的中间件路由

2.1.0 2018-05-06 07:21 UTC

This package is auto-updated.

Last update: 2024-09-15 02:07:57 UTC


README

Build Status Code Coverage Code Climate Scrutinizer Code Quality

安装

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)