ellipse/router-aura

Aura 路由 Psr-15 中间件和请求处理器

1.0.1 2018-03-06 10:23 UTC

This package is auto-updated.

Last update: 2024-08-25 23:37:13 UTC


README

Aura 路由 Psr-15 中间件和请求处理器。

要求 php >= 7.0

安装 composer require ellipse/router-aura

运行测试 ./vendor/bin/kahlan

作为请求处理器的使用

此包提供了一个 Ellipse\Router\AuraRouterRequestHandler Psr-15 请求处理器,它接受一个 Aura\Router\RouterContainer 实例作为参数。

此 aura 路由器预计将有一个填充的映射或已定义映射构建器,通常使用其 ->setMapBuilder() 方法。它匹配的路由处理器预计是 Psr\Http\Server\RequestHandlerInterface 的实现。

AuraRouterRequestHandler 处理请求时,aura 路由器用于匹配 Psr-15 请求处理器。当匹配的路线模式包含占位符时,将创建一个新的请求,这些占位符与匹配值作为请求属性。最后,通过这个新请求代理匹配的请求处理器以实际返回响应。

使用其 ->setMapBuilder() 方法设置 aura 路由器映射构建器允许在处理请求时仅执行将路线映射到路由的任务,从而节省时间。如果由于某些原因,应用程序使用其他请求处理器处理传入请求,则不会浪费时间去映射这些请求的路线。

关于异常

  • 当 aura 路由器匹配的路由处理器不是 Psr\Http\Server\RequestHandlerInterface 的实现时,会抛出 Ellipse\Router\Exceptions\MatchedHandlerTypeException
  • 当没有路线匹配 URL 时,会抛出 Ellipse\Router\Exceptions\NotFoundException
  • 当路线匹配 URL 但请求 HTTP 方法不被匹配的路线允许时,会抛出 Ellipse\Router\Exceptions\MethodNotAllowedException
  • 当任何其他 aura 路由器规则失败时,会抛出 Ellipse\Router\Exceptions\AuraMatcherException
<?php

namespace App;

use Aura\Router\RouterContainer;

use Ellipse\Router\AuraRouterRequestHandler;

// Get a psr7 request.
$request = some_psr7_request_factory();

// Create an aura router.
$router = new RouterContainer;

// Set the router map builder.
$router->setMapBuilder(function ($map) {

    // The route handlers must be Psr-15 request handlers.
    $map->get('index', '/', new SomeRequestHandler);

    // When this route is matched a new request with an 'id' attribute would be passed to the request handler.
    $map->get('path', '/path/{id}', new SomeOtherRequestHandler);

});

// Create an aura router request handler using this aura router.
$handler = new AuraRouterRequestHandler($router);

// Produce a response with the aura router request handler.
$response = $handler->handle($request);

作为中间件的使用

此包提供了一个 Ellipse\Router\AuraRouterMiddleware Psr-15 中间件,也接受 aura 路由作为参数。

在内部,它创建一个带有给定 aura 路由的 AuraRouterRequestHandler 并使用它来处理请求。当抛出 NotFoundException 时,请求处理将委托给下一个中间件。

<?php

namespace App;

use Aura\Router\RouterContainer;

use Ellipse\Router\AuraRouterMiddleware;

// Get a psr7 request.
$request = some_psr7_request_factory();

// Create an aura router.
$router = new RouterContainer;

// Set the router map builder.
$router->setMapBuilder(function ($map) {

    // The route handlers must be Psr-15 request handlers.
    $map->get('index', '/', new SomeRequestHandler);

    // When this route is matched a new request with an 'id' attribute would be passed to the request handler.
    $map->get('path', '/path/{id}', new SomeOtherRequestHandler);

});

// Create an aura router middleware using this aura router.
$middleware = new AuraRouterMiddleware($router);

// When a route is matched the request is handled by the matched request handler.
// Otherwise NextRequestHandler is used to handle the request.
$response = $middleware->process($request, new NextRequestHandler);