symandy / progress-event
Events used in Symfony services to handle console progress bar
Installs: 9 727
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: >=7.4
- symfony/console: ^4.4|^5.4|^6.0
- symfony/event-dispatcher: ^4.4|^5.4|^6.0
Requires (Dev)
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5
README
This package contains a set of events and subscribers to be used in Symfony services.
The aim is to externalize Symfony progress bar handle from services and use progress bar events instead.
Installation
composer require symandy/progress-event
Usage
- In your Symfony command, register one of available subscribers before calling the service where the task is executed.
<?php use Symandy\Component\ProgressEvent\EventSubscriber\ProgressBarSubscriber; use Symandy\Component\ProgressEvent\EventSubscriber\SymfonyStyleSubscriber; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; final class FooCommand extends Command { private EventDispatcherInterface $eventDispatcher; private FooHandler $fooHandler; // Configure command protected function execute(InputInterface $input, OutputInterface $output): int { // Use the basic progress bar $this->eventDispatcher->addSubscriber(new ProgressBarSubscriber(new ProgressBar($output))); // Or use the Symfony style progress bar $io = new SymfonyStyle($input, $output); $this->eventDispatcher->addSubscriber(new SymfonyStyleSubscriber($io)); $this->fooHandler->handleComplexTask(); return Command::SUCCESS; } }
- Dispatch the wanted events while handling some complex task
<?php use Symandy\Component\ProgressEvent\Event\AdvanceEvent; use Symandy\Component\ProgressEvent\Event\FinishEvent; use Symandy\Component\ProgressEvent\Event\StartEvent; use Symfony\Component\EventDispatcher\EventDispatcherInterface; final class FooHandler { private EventDispatcherInterface $eventDispatcher; public function __construct(EventDispatcherInterface $eventDispatcher) { $this->eventDispatcher = $eventDispatcher; } public function handleComplexTask(): void { $items = ['foo', 'bar', 'baz']; $this->eventDispatcher->dispatch(new StartEvent(count($items))); foreach ($items as $item) { // Handle some complex task $this->eventDispatcher->dispatch(new AdvanceEvent()); } $this->eventDispatcher->dispatch(new FinishEvent()); } }