Abstract layer between services and output in PHP

1.0.3 2021-11-08 13:28 UTC

This package is auto-updated.

Last update: 2024-07-08 18:46:23 UTC


Build Status Software License Packagist Version

Feedback is an io abstraction that lets you decouple functional code and business logic from (CLI) I/O.


composer require linku/feedback


In the class or service you want to decouple, add a Feedback attribute and make sure it is filled with an instance of NoFeedback by default.

In order to allow the code calling this service to override the default feedback, add a setFeedback method.

In the logic of your service, you can now call the feedback methods.


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');


        for ($i = 0; $i < 100; $i++) {
            try {
                // Do something in a loop here
            } catch (\Throwable $exception) {



        $this->feedback->success('Completed my service run');

In the script or CLI command that uses your service, set the apropriate feedback.


$service = new MyService();

$service->setFeedback(new LoggerFeedback(new Logger()));


Available feedback


A safe fallback that doesn't output anything.


A feedback you can fill with your own anonymous functions.


A feedback that will write to any PSR-3 Logger.


A feedback that lets you use multiple feedbacks at the same time.


$myService->setFeedback(new ChainedFeedback(
    new LoggerFeedback(new Logger()),
    new ClosureFeedback(/* ... */)

Other feedback packages


If you use Symfony CLI, check out Linku/SymfonyStyleFeedback for integration with the Symfony Style component.