/** * {@inheritdoc} */ public function start() { $dispatcher = $this->getDispatcher(); $sourceEvent = new SourcePipelineEvent(); $sourceEvent->setContext($this->getContext()); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_SOURCE), $sourceEvent); $this->setContext($sourceEvent->getContext()); $sources = $sourceEvent->getSources(); $outputs = []; $startEvent = new StartPipelineEvent(); $startEvent->setContext($this->getContext()); $startEvent->setItemCount($this->countSourceItems($sources)); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_START), $startEvent); $this->setContext($startEvent->getContext()); $this->progressBar && $this->progressBar->start($this->countSourceItems($sources)); foreach ($sources as $source) { foreach ($source as $item) { $itemEvent = new ItemPipelineEvent($item); $itemEvent->setContext($this->getContext()); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_MODIFY), $itemEvent); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_CONSUME), $itemEvent); $output = $itemEvent->getOutput(); if ($output !== null) { $outputs[] = $output; } $this->setContext($itemEvent->getContext()); $this->progressBar && $this->progressBar->advance(); } } $finishEvent = new FinishPipelineEvent(); $finishEvent->setContext($this->getContext()); $dispatcher->dispatch($this->getEventName(self::EVENT_SUFFIX_FINISH), $finishEvent); $this->progressBar && $this->progressBar->finish(); return ['outputs' => $outputs]; }