Readers
You read data using an object that implements ReaderInterface
. This interface extends \IteratorAggregate
interface
and therefore you need to implement the getIterator()
method.
Table of Contents
ArrayReader
The ArrayReader
feeds the elements of an array to the workflow. In addition to the methods required by
ReaderInterface
it provides a getData()
methods that returns the full array.
use Cocur\Plum\Reader\ArrayReader;
$reader = new ArrayReader(['Stark', 'Lannister', 'Targaryen', ...]);
$reader->getData(); // -> ['Stark', 'Lannister', 'Targaryen', ...]
FinderReader
You can read directories and files using the Symfony Finder component and FinderReader
.
use Cocur\Plum\Reader\FinderReader;
use Symfony\Component\Finder\Finder;
$finder = new Finder();
// Further configuration of Finder
$reader = new FinderReader($finder);
JsonReader
JsonReader
reads a .json
file. It uses Braincrafted\Json to decode the
JSON file. If you use Composer, add it by calling composer require braincrafted/json:@stable
.
use Cocur\Plum\Reader\JsonReader;
$reader = new JsonReader('foo.json');
$reader->getIterator(); // -> \ArrayIterator
$reader->count();
Custom Readers
As mentioned in the introduction ReaderInterface
extends IteratorAggregate
and readers therefore have to
implement the getIterator()
method.
use Cocur\Plum\Reader\ReaderInterface;
class CollectionReader implements ReaderInterface
{
private $collection = [];
public function add($item)
{
$this->collection[] = $item;
}
public function getIterator()
{
return new ArrayIterator($this->collection);
}
}
PHP 5.5 and Generators
If you are using PHP 5.5+ the getIterator()
method can also return a generator.
public function getIterator()
{
foreach ($this->collection as $item) {
yield $item;
}
}