dariorieke/kernel

该软件包最新版本(dev-master)没有提供许可信息。

一个基于事件的PSR-15应用内核,通过返回PSR-7响应来处理PSR-7请求

dev-master 2022-02-03 16:55 UTC

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

使用方法

要构建内核,您必须提供以下内容

关联的仓库包含了接口以及基本实现。

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