Writers
Use writers to write the result of the workflow. The target doesn't necessarily have to write to a persistent storage,
you can also write, for example, into arrays or objects. Writers must implement the WriterInterface
that provides
three methods: writeItem()
, prepare()
and finish()
. The workflow calls prepare()
before it reads the first item
and finish()
after it read the last item.
Multiple writers can be added to a workflow in any ordering. Therefore it is possible to filter the read items, write them somewhere, further filter them and then write them elsewhere.
Table of Contents
ArrayWriter
The ArrayWriter
writes the data into an array that can be retrieved using the getData()
method.
use Cocur\Plum\Writer\ArrayWriter;
$writer = new ArrayWriter();
// Workflow processing
$writer->getData() // -> [...]
ConsoleProgressWriter
In a console application that uses Symfony's Console component you can use ConsoleProgressWriter
to give
the user feedback on the progress of the workflow.
use Cocur\Plum\Writer\ConsoleProgressWriter;
$worklow->addWriter(new ConsoleProgressWriter($progressBar));
$worklow->addWriter($otherWriter);
CsvWriter
The CsvWriter
allows you to write the data into a .csv
file.
use Cocur\Plum\Writer\CsvWriter;
$writer = new CsvWriter('foobar.csv', ',', '"');
$writer->prepare();
$writer->writeItem(['value 1', 'value 2', 'value 3');
$writer->finish();
The second and third argument of __construct()
are optional and by default ,
and "
respectively. In addition
the setHeader()
method can be used to define the names of the columns. It has to be called before the prepare()
.
$writer = new CsvWriter('foobar.csv');
$writer->setHeader(['column 1', 'column 2', 'column 3']);
$writer->prepare();
JsonWriter
JsonWriter
writes the items as JSON into a file. It uses Braincrafted\Json
to encode the items.
use Cocur\Plum\Writer\JsonWriter;
$writer = new JsonWriter('foobar.json');
$writer->writeItem(['key1' => 'value1', 'key2' => 'value2'));
$writer->finish();
It is essential that finish()
is called, because there happens the actual writing. The prepare()
method does
nothing.
Conditional Writers
Writers can be conditional if a filter is passed to the addWriter()
method.
$workflow->addWriter($writer, $filter);
An item is only written to a conditional writer, if the filter returns true
for the item.