netsells / csvme
An opinionated library to make exporting data in CSV format super simple.
Installs: 5 116
Dependents: 1
Suggesters: 0
Security: 0
Stars: 4
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- league/csv: ^8.2
This package is auto-updated.
Last update: 2024-10-28 14:06:06 UTC
README
Csvme is an opinionated library that utilises the league/csv
library.
It is created and maintained by the Netsells team
Install
Install Csvme
using Composer.
$ composer require netsells/csvme
Usage
Basic Usage
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();
CSV Composers
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); } }
CORS Headers
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();