Extensible data output library.
Use Composer to install:
{
"require": {
"ts/writer": "1.2.*"
}
}If you know exactly what you want to output, feel free to instantiate a writer implementation directly:
use Symfony\Component\EventDispatcher\EventDispatcher;
use TS\Writer\Implementation\Json;
// Creating the writer
$jsonWriter = new Json(new EventDispatcher);
// Setting the data array
$jsonWriter->setData(array(/* ... */));
// Setting the file path to output to
$jsonWriter->setTargetFile(/* path where the .json file should be created */);
// Dumping the data
$jsonWriter->writeAll();Instead of instantiating writer implementations directly you can use the FileWriterContainer to create the writer:
use Symfony\Component\EventDispatcher\EventDispatcher;
use TS\Writer\FileWriterContainer;
// Creating the FileWriterContainer
$container = new FileWriterContainer(new EventDispatcher);
// Registration and setting a type
$container->registerWriter('TS\\Writer\\Implementation\\Json', 'json');
// ...
// Registering further implementations...
// ...
// Creating the writer
$writer = $container->createForType('json');
// Setting the data array
$writer->setData(array(/* ... */));
// Setting the file path to output to
$writer->setTargetFile(/* path where the .json file should be created */);
// Dumping the data
$writer->writeAll();Also supports everyone's favorite ArrayAccess interface:
// Register
$container['json'] = 'TS\\Writer\\Implementation\\Json';
// Create writer
$writer = $container['json'];
// ... or
$writer = $container['TS\\Writer\\Implementation\\Json'];
// Check if writer or type is supported
var_dump(isset($container['json'])); // true
// Unregister
unset($container['json']);
// ... or
unset($container['TS\\Writer\\Implementation\\Json']);
// ... or
unset($container[$writer]);You can intercept or influence most parts of the writer's lifecycle by utilizing Symfony's EventDispatcher Component.
The events triggered by the writer can be found in the TS\Writer\WriterEvents namespace:
- BEFORE_WRITE: Dispatched before the writer tries to write.
- INIT: Dispatched when the writer is instantiated.
- WRITE: Dispatched when a line write occurs.
- WRITE_ALL: Dispatched when a writer's writeAll() method is called.
- WRITE_COMPLETE: Dispatched when the writer has finished writing.
The writer comes with service providers for both Laravel and Silex, which can be found in the TS\Writer\Provider namespace.
| Type | Class name |
|---|---|
| Csv | TS\Writer\Implementation\Csv |
| Ini | TS\Writer\Implementation\Ini |
| Json | TS\Writer\Implementation\Json |
| Txt | TS\Writer\Implementation\Txt |
| Xml | TS\Writer\Implementation\Xml |
| Yaml | TS\Writer\Implementation\Yaml |
Since creating excel sheets can be a little complex I've opted out of trying to achieve an abstraction. Feel free to use the great PHPExcel library directly for that purpose.

