Export CSV

Exportuje dane z tabeli do pliku csv

# composer require friendsofcake/cakephp-csvview
# bin/cake plugin load CsvView

config/router.php

$routes->addExtensions(['csv'])

Controller

$invoices = $this->Invoices->find();

$this->set(compact('invoices'));

// EXPORT CSV
if ($this->request->is('csv')) {    $header = ['Lp', 'Nr faktury', 'Opis', 'Netto', 'Brutto', 'Opłacona'];
  $footer = [,'totals', , '200', '500', ];  // Kilka pustych kolumn

  $i=1;
  foreach($invoices as $row)
  {
    // Tablica dwuwymiarowa (tablica tablic)
    $exports[$i]['lp']       = $i;
    $exports[$i]['number']   = $row->project->number;
    $exports[$i]['title']    = $row->project->name;
    $exports[$i]['netto']    = str_replace('.', ',', (string) $row->netto);
    $exports[$i]['brutto']   = str_replace('.', ',', (string) $row->brutto);
    $exports[$i]['is_payed'] = $row->is_payed;
    $i++;
  }

   $this->set(compact('exports'));  

   $this->viewBuilder()
            ->setClassName('CsvView.Csv')
            ->setOptions([
                'serialize'    => 'exports',
                'header'       => $header,
                'footer'       => $footer,
                'dataEncoding' => 'UTF-8',
                'csvEncoding'  => 'CP1250',
                'delimiter'    => ';'
            ]);

  $new_response = $this->getResponse()->withDownload('fakturyRB-'.date('d-m-YTHi').'.csv');
  $this->setResponse($new_response);
  return;
} // koniec  exportu csv

https://github.com/FriendsOfCake/cakephp-csvview