Skip to content
Viames Marino edited this page Oct 19, 2026 · 2 revisions

Pair framework: Report

Pair\Services\Report is an abstract base for spreadsheet exports (PhpSpreadsheet).

XLSX generation requires the optional phpoffice/phpspreadsheet package, which is not installed by Pair itself:

composer require phpoffice/phpspreadsheet

Saving a .csv file uses Pair's CSV writer directly. The CSV builder can optionally use the external csv2xlsx executable for XLSX conversion, with PhpSpreadsheet as the fallback when the executable is unavailable.

Main methods

  • save(string $filePath): bool
  • download(): void
  • setTitle(string $title): self, setSubject(string $subject): self
  • setBuilder(string $library): self
  • getSpreadsheet(): Spreadsheet

Protected helpers for subclasses:

  • addColumn(string $head, ?string $format = null): self
  • addRow(array $indexedCellsValue): void
  • setDataAndColumnsFromDictionary(array $dictionary): self
  • setDataAndColumnsFromObjects(array $objectList): self

Implementation example

final class OrdersReport extends \Pair\Services\Report {
	/**
	 * Populate the report columns and rows.
	 */
	public function build(array $rows): void {
		$this->addColumn('Order #')
			->addColumn('Customer')
			->addColumn('Total');

		foreach ($rows as $row) {
			$this->addRow([$row['id'], $row['customer'], $row['total']]);
		}
	}
}

$report = new OrdersReport();
$report->setTitle('Orders')->build($data);
$report->save(APPLICATION_PATH . '/temp/orders.xlsx');

Notes

  • Override beforeSave() and afterSave() for custom hooks.
  • Date/boolean format helpers are available in the base class.

See also: Query, Utilities.

Clone this wiki locally