dariorieke / kernel
一个基于事件的PSR-15应用内核,通过返回PSR-7响应来处理PSR-7请求
Requires
- dariorieke/callable-resolver: dev-master
- dariorieke/event-dispatcher: dev-master
- dariorieke/router: dev-master
- psr/http-message: 1.0
- psr/http-server-handler: 1.0
Requires (Dev)
- phpunit/phpunit: ^9
Provides
This package is auto-updated.
Last update: 2024-08-29 04:49:14 UTC
README
一个基于事件的PSR-15 RequestHandlerInterface,通过返回PSR-7响应来处理PSR-7 ServerRequests
安装
通过composer安装
"require": {
"dariorieke/kernel": "dev-master"
}
运行测试
使用以下命令运行测试
./vendor/bin/phpunit .\tests
使用方法
要构建内核,您必须提供以下内容
- 一个DarioRieke\EventDispatcher\EventDispatcherInterface实现
- 一个DarioRieke\Router\RouterInterface实现
- 一个DarioRieke\CallableResolver\CallableResolverInterface
- 以及一个DarioRieke\CallableResolver\ArgumentResolverInterface实现
关联的仓库包含了接口以及基本实现。
use DarioRieke\Kernel\Kernel;
$kernel = new Kernel(
$dispatcher
$router
$callableResolver,
$argumentResolver
);
$psr7Response = $kernel->handle($psr7Request);
基于事件的响应处理
内核使用提供的EventDispatcher来分配不同的事件以处理响应生成。以下步骤显示了生成响应所使用的策略
1. 进入内核的请求
当请求进入内核时,通过EventDispatcher分发的第一个事件是DarioRieke\Kernel\Event\RequestEvent
事件。您可以通过在事件处理器中调用RequestEvent的setResponse
方法在内核工作流程的此点返回一个响应。
2. 匹配路由/解析控制器
第二步是确定处理请求的“控制器”,这是通过RouterInterface
完成的。然后CallableResolver
将解析您的控制器并返回一个实际的调用。当调用已解析,将分派DarioRieke\Kernel\Event\ControllerEvent
事件。此事件允许您在控制器实际调用之前通过事件的setController
方法更改控制器。
3. 解析控制器参数
现在我们有一个实际的调用,它可能还需要一些参数。这个任务委托给了ArgumentResolverInterface
。当参数成功解析后,将分派DarioRieke\Kernel\Event\ControllerArgumentsEvent
。要更改传递给控制器的参数,请使用事件的setArguments
方法。
4. 调用控制器
控制器现在将使用提供的参数被调用。通常,控制器应该返回一个PSR-7 ResponseInterface
。如果是这样,将分派DarioRieke\Kernel\Event\ResponseEvent
,这允许您在通过事件的setResponse
方法返回之前更改响应。
如果控制器不返回ResponseInterface
,将分派一个可选的事件,即DarioRieke\Kernel\Event\ViewEvent
。此事件负责通过事件的setResponse
方法将控制器的返回值转换为实际的ResponseInterface
。
处理异常
如果发生错误并且出现未捕获的\Exception
,将分派DarioRieke\Kernel\Event\ExceptionEvent
。这样,您可以通过事件的setResponse
方法将异常转换为用于显示错误的响应。内核提供了一些与HTTP状态代码映射的异常,例如DarioRieke\Kernel\Exception\Http\NotFoundException
。