linku / feedback
PHP 中服务与输出之间的抽象层
1.0.3
2021-11-08 13:28 UTC
Requires
- php: ^7.2.0|^8.0.0
- psr/log: ^1.1|^2.0|^3.0
Requires (Dev)
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^8.0|^9.0
README
Feedback 是一个 io 抽象,它允许您将功能代码和业务逻辑从(CLI)I/O 解耦。
安装
composer require linku/feedback
使用
在您想要解耦的类或服务中,添加一个 Feedback
属性,并确保它默认填充了 NoFeedback
的实例。
为了允许调用此服务的代码覆盖默认反馈,添加一个 setFeedback
方法。
在您服务的逻辑中,现在可以调用反馈方法。
<?php use Linku\Feedback\Feedback; use Linku\Feedback\NoFeedback; class MyService { /** * @var Feedback */ private $feedback; public function __construct() { $this->feedback = new NoFeedback(); } public function setFeedback(Feedback $feedback): void { $this->feedback = $feedback; } public function run(): void { $this->feedback->info('Starting my service run'); $this->feedback->startProcess(); for ($i = 0; $i < 100; $i++) { try { // Do something in a loop here } catch (\Throwable $exception) { $this->feedback->exception($exception); } $this->feedback->advanceProcess(); } $this->feedback->finishProcess(); $this->feedback->success('Completed my service run'); } }
在使用您的服务的脚本或 CLI 命令中,设置适当的反馈。
<?php $service = new MyService(); $service->setFeedback(new LoggerFeedback(new Logger())); $service->run();
可用的反馈
NoFeedback
一个安全的回退,不会输出任何内容。
ClosureFeedback
一个您可以填充自己的匿名函数的反馈。
LoggerFeedback
一个将写入任何 PSR-3 日志器的反馈。
ChainedFeedback
一个允许您同时使用多个反馈的反馈。
<?php $myService->setFeedback(new ChainedFeedback( new LoggerFeedback(new Logger()), new ClosureFeedback(/* ... */) ));
其他反馈包
SymfonyStyleFeedback
如果您使用 Symfony CLI,请查看 Linku/SymfonyStyleFeedback,了解与 Symfony Style 组件的集成。