# CSV-Exporter ## Datei erstellen ```php <?php use Xentral\Components\Database\Database; use Xentral\Components\Exporter\Csv\CsvExporter; /** @var Database $db */ $db = $container->get('Database'); $data = $db->yieldAll('SELECT e.* FROM employees AS e'); $filePath = tempnam(sys_get_temp_dir(), 'employees') . '.csv'; $exporter = new CsvExporter(); $exporter->export($filePath, $data); ``` ##### Rückgabewerte * Die `export()` Methode liefert nichts zurück. * Die `exportToResource()` gibt die geöffnete Ressource zurück. Die Ressource muss manuell (mit `fclose()`) geschlossen werden. Der Dateizeiger ist auf `EOF` platziert. ##### Funktionsparameter Beide `export*()`-Methoden nehmen die gleichen Parameter entgegen. * Als erster Parameter wird ein absoluter Dateipfad erwartet. Alternativ kann ein Stream Wrapper angegeben werden. Beispiele: * `php://output` um die CSV direkt auszugeben (`echo`). * `php://memory` um in den Arbeitsspeicher zu schreiben. * `php://temp` um in eine temporäre Datei zu schreiben. * Der zweite Parameter nimmt die Daten entgegen die als CSV exportiert werden sollen. Folgende Typen sind erlaubt: * `array` * `Generator` * `Iterator` * `IteratorAggregate` ##### Konstruktor-Parameter * Der erste Konstruktor-Parameter ist optional und nimmt die CSV-Konfiguration entgegen; siehe _Erweiterte Beispiele_ > _CSV konfigurieren_. ## Datei-Download erstellen ```php <?php use Xentral\Components\Database\Database; use Xentral\Components\Exporter\Csv\CsvExporter; /** @var Database $db */ $db = $container->get('Database'); $data = $db->yieldAll('SELECT e.* FROM employees AS e'); $exporter = new CsvExporter(); $resource = $exporter->exportToResource('php://memory', $data); rewind($resource); $stat = fstat($resource); header('Cache-Control: must-revalidate'); header('Pragma: must-revalidate'); header('Content-type: text/csv'); header('Content-Disposition: attachment; filename="employees.csv"'); header('Content-Length: ' . $stat['size']); fpassthru($resource); fclose($resource); ``` ## Erweiterte Beispiele ### CSV konfigurieren ```php <?php use Xentral\Components\Exporter\Csv\CsvConfig; use Xentral\Components\Exporter\Csv\CsvExporter; $csvConfig = new CsvConfig(); $csvConfig->setDelimiter(';'); $csvConfig->setEnclosure('"'); $csvConfig->setSourceCharset('UTF-8'); $csvConfig->setTargetCharset('ISO-8859-1'); $exporter = new CsvExporter($csvConfig); $exporter->export($filePath, $data); ``` ### Daten zusammenführen ```php <?php use Xentral\Components\Exporter\Csv\CsvExporter; use Xentral\Components\Exporter\Collection\DataCollection; $collection = new DataCollection($headline, $employees); $exporter = new CsvExporter(); $exporter->export($filePath, $collection); ``` ### Daten formatieren ```php <?php use Xentral\Components\Exporter\Csv\CsvExporter; use Xentral\Components\Exporter\Collection\FormatterCollection; $formatter = new FormatterCollection($data, function ($row) { $row['fullname'] = $row['firstname'] . ' ' . $row['lastname']; return $row; }); $exporter = new CsvExporter(); $exporter->export($filePath, $formatter); ``` Statt einer anonymen Funktion (`Closure`) kann ein `callable` übergeben werden.