Csvme is an opinionated library that utilises the league/csv
library.
It is created and maintained by the Netsells team
Install Csvme
using Composer.
$ composer require netsells/csvme
Csvme always expects an array of objects and optionally a layout closure for the header row.
$csv = new Csvme();
$csv->withHeader(['ID', 'Total', 'Number of Items', 'Created At'])
->withLayout(function(Order $order) {
return [
$order->id,
$order->total,
$order->items->count(),
$order->created_at->format('d-m-Y'),
];
})
->withItems($orders)
->output();
It is possible to use an external class to offload the layout of the CSV to a dedicated file.
$csv = new Csvme();
$csv->output(new OrderExportComposer($orders));
<?php
use Netsells\Csvme\Csvme;
use Netsells\Csvme\CsvComposer;
class OrderExportComposer implements CsvComposer
{
/**
* The orders.
*
* @var array
*/
protected $orders;
/**
* Create a new csv composer.
*
* @param array $orders
* @return void
*/
public function __construct($orders)
{
$this->orders = $orders;
}
/**
* Configure the CSV
*
* @param Csvme $csv
* @return void
*/
public function compose(Csvme $csv)
{
$csv->withHeader(['ID', 'Total', 'Number of Items', 'Created At'])
->withLayout(function(Order $order) {
return [
$order->id,
$order->total,
$order->items->count(),
$order->created_at->format('d-m-Y'),
];
})
->withItems($this->orders);
}
}
When using Csvme in api endpoints, you can add the Access-Control-Allow-Origin
header using the setCorsHeader()
method.
The method defaults to allow all origins but a specific origin can be passed in as an argument in the following way.
$csv = new Csvme();
$csv->withHeader(['ID', 'Total', 'Number of Items', 'Created At'])
->withLayout(function(Order $order) {
return [
$order->id,
$order->total,
$order->items->count(),
$order->created_at->format('d-m-Y'),
];
})
->withItems($orders)
->setCorsHeader('https://test.com')
->output();