psg / psr-102
应用程序标准化
Requires
- php: >=5.3.0
- psg/psr-100: ^0.2.0
- psg/psr-101: ^0.4.0
This package is auto-updated.
Last update: 2024-09-15 06:15:21 UTC
README
此标准已被https://github.com/PHP-SG/sr-2 替换。
PSR 102 应用程序标准化
PSR 101 中间件应用程序无法解决一些问题
- 一些“中间件”既不关心前端也不关心后端,也不应该通过调用
handle
或next
来强制其关心 - 一些应用程序需要外部逻辑 - 在响应发送后或非常开始时运行的逻辑,并且不关心改变请求和响应
这导致了 LayeredAppInterface。
概念
类型
- Beforeware:用于设置配置的外部逻辑
- Frontware:只关心前端的中间件
- Middleware:封装核心和其他中间件的常规中间件
- Coreware:被中间件封装的核心应用程序逻辑
- Backware:只关心后端的中间件
- Afterware:用于在响应后进行操作的外部逻辑,如清理
ExitResponseInterface 前端中间件为了强制绕过,因为它不通过调用 next 来控制流程,必须返回一个实现 ExitResponseInterface 的特殊响应。它通过应用程序工厂 $app->createExitResponse
完成,这与 createResponse
相似。
请求和响应流程
在这里,您可以看到响应被从前端中间件转发到核心。
Coreware
在应用程序中,有一个核心的概念,通常被称为控制器。这个核心的特殊之处在于,无论在应用程序运行过程中添加了什么中间件,核心始终在核心(而中间件的执行取决于其他中间件的列表)处执行。我决定将这个 core
称为而不是 control
以使其更通用(它还包括运行视图代码)。我还决定将其作为一个单例可调用或具有 __invoke 方法的可实例化事物。在我的实现中,我向可调用提供参数($request, $response, $app)。然而,框架可能希望将参数注入核心调用中
- 将参数注入核心调用中
- 如果核心是可实例化的,则将其注入到 __construct 中。因此,参数留给了框架。
中间件,如路由器,可以使用 $app->core($core)
设置核心。 $app->core()
方法设置此核心ware,并将覆盖先前的任何核心。我决定核心ware不应是多个。核心ware 不期望是通用的,它期望是特定于应用程序的,因此列表是不必要的。
关于 has
函数有一个概念上的问题。由于现在有了外部逻辑,并且有前端和后端特定的中间件,has
指的是什么?
扩展
我想框架将想要扩展 LayeredApp 以使用 FIG PSR-11 和 FIG PSR-14。我可能稍后会添加这样的接口到这个存储库。