psg/sr2

应用标准化

0.1 2021-07-14 22:58 UTC

This package is auto-updated.

Last update: 2024-09-15 05:44:41 UTC


README

composer require psg/sr2
class App implements Psg\Sr2\LayeredApp{}

概念

类型

  • 前置件:配置设置的边界外件
  • 前端件:仅关心前端的中间件
  • 中间件:封装核心和其他中间件的常规中间件
  • 核心件:被中间件封装的核心应用程序逻辑
  • 后端件:仅关心后端的中间件
  • 后置件:在响应之后执行的事情的边界外件,例如清理

Layered App

ExitResponseInterface 对于前端件强制绕过,因为它不通过调用next来控制流程,必须返回一个实现ExitResponseInterface的特殊响应。它通过应用工厂 $app->createExitResponse 来完成,这与 createResponse 类似。

请求和响应流程

上述图表是一个过于简化的版本。现实情况看起来更像是这样:分层应用

在这里可以看到响应从前端件转发到核心。

核心件

在应用中,有一个核心的概念,通常被称为控制器。这个核心的特殊之处在于,无论在应用运行期间添加了什么中间件,核心都始终在核心(而中间件的执行位置取决于其他中间件的列表)。我决定将这个 core 称为而不是 control,使其更通用(它还包括运行视图代码)。我还决定将其作为一个单个可调用对象或具有 __invoke 方法的可实例化对象。在我的实现中,我向可调用对象提供了参数($request, $response, $app)。然而,框架可能希望将参数

  • 按需注入到核心调用中
  • 如果核心是可实例化的,则将其注入到 __construct 中。因此,参数由框架决定。

中间件,如路由器,可以使用 $app->core($core) 设置核心。$app->core() 方法设置这个核心件,并将覆盖之前存在的任何核心。我决定核心件不应该是多个。核心件不应该是通用的,它应该是特定于应用的,因此列表是不必要的。

关于 has 函数的概念问题似乎存在。由于现在有了外设,并且有前端和后端特定的中间件,has 指的是什么?

扩展

根据需求和我的空闲时间,我可能会添加事件和容器扩展,可能使用 FIG PSRs。

示例

请参阅 SR2-implementation