linku/feedback

PHP 中服务与输出之间的抽象层

1.0.3 2021-11-08 13:28 UTC

This package is auto-updated.

Last update: 2024-09-08 19:10:10 UTC


README

Build Status Software License Packagist Version

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 组件的集成。