psg / psr-102-implementation
应用标准化原型
0.1
2021-07-11 23:34 UTC
Requires
- php: >=5.3.0
- psg/psr-100: ^0.2.0
- psg/psr-100-implementation: ^0.2.0
- psg/psr-101: ^0.4.0
- psg/psr-102: ^0.1.0
This package is auto-updated.
Last update: 2024-09-12 06:34:38 UTC
README
此实现的目的是提供一个详细文档的原型,展示如何实现分层应用。据我所知,将常规中间件与前端和后端集成带来的复杂性,一直是阻止实现此功能的原因,这使得本例变得尤为重要。
备注
在我的实现中,我提供了带有参数($request, $response, $app)的可调用函数。然而,框架可能会希望
- 将参数按需注入到核心调用中
- 如果核心是可实例化的,则在 __construct 中注入参数。因此,参数的选择留给框架。
可能的改进
- 即时中间件构建,通过依赖注入到 __construct
- 如果某个阶段的 ware 被添加,则添加异常
使用方法
查看所有层,它们设置为 echo 来宣布自身,并添加一个标题
use Psg\Psr102\{Beforeware, Frontware, Middleware, Backware, Afterware, LayeredApp}; $core = function($request, $response, $app){ echo "Request Headers:\n"; var_export($request->getHeaders()); echo "\nadding body\n"; return $response->withBodyString("\nBODY\n"); }; $App = new LayeredApp; $App->add(new Beforeware); $App->add(new Frontware); $App->add(new Middleware); $App->add(new Middleware); $App->add(new Backware); $App->add(new Afterware); $App->core($core); /*> Before Front Middle wrap1{ Middle wrap2{ Request Headers: array ( 'Host' => array ( 0 => 'bobery.com', ), 'frontware' => array ( 0 => '1', ), 'middleware' => array ( 0 => '1', 1 => '2', ), ) adding body }wrap2 }wrap1 Back ==========RESPONSE {============= array ( 'middleware' => array ( 0 => '2', 1 => '1', ), 'Backware' => array ( 0 => '1', ), ) BODY ==========} RESPONSE============= After */
查看在特定阶段退出的能力
# Exit in frontware $App = new LayeredApp; $App->add(new Beforeware); $App->add(new Frontware(['exit'=>true])); $App->add(new Middleware); $App->add(new Middleware); $App->add(new Backware); $App->add(new Afterware); $App->core($core); /*> Before Front Back ==========RESPONSE {============= array ( 'exit_at' => array ( 0 => 'frontware', ), 'Backware' => array ( 0 => '1', ), ) ==========} RESPONSE============= After */ # Exit in middleware $App = new LayeredApp; $App->add(new Beforeware); $App->add(new Frontware); $App->add(new Middleware(['exit'=>true])); $App->add(new Middleware); $App->add(new Backware); $App->add(new Afterware); $App->core($core); /*> Before Front Middle Back ==========RESPONSE {============= array ( 'exit_at' => array ( 0 => 'middleware id 1', ), 'Backware' => array ( 0 => '1', ), ) ==========} RESPONSE============= After */