arrayToExport = array(); $this->titleDocument = 'csv_file'; } public function setTitle($title, $displayHeader = false){ $this->titleDocument = $this->formatTitle($title); if($displayHeader){ array_unshift($this->arrayToExport, array('')); array_unshift($this->arrayToExport, array($title)); } } public function setColumns($columns, $displayLegend = true){ $this->columns =array_fill_keys(array_keys($columns), null);; if($displayLegend)$this->arrayToExport[] = $columns; } public function cell($column, $value){ $this->arrayToExport[] = array_merge($this->columns, array($column =>$value)); } public function row($values = null, $row = false){ if(!$row){ if($values)$this->arrayToExport[] = array_merge($this->columns, $values); else $this->arrayToExport[] = array(); }else{ if($values)$this->arrayToExport[$row] = array_merge($this->columns, $values); else $this->arrayToExport[$row] = array(); } } public function dump(){ dump($this->arrayToExport); } public function getReponse(){ $response = new StreamedResponse(function () { $handle = fopen('php://output', 'r+'); foreach ($this->arrayToExport as $line) { fputcsv($handle, $line, ';', ' '); } fclose($handle); }); $response->headers->set('Content-Type', 'application/force-download'); $response->headers->set('Content-Disposition', 'attachment; filename="'.$this->titleDocument.'.csv"'); return $response; } private function formatTitle($str) { $str = str_replace("-", ' ', $str); $str = preg_replace('/\s+/', '_',$str);; //$str = str_replace(" ", '_', $str); $str = iconv('UTF-8', 'ASCII//TRANSLIT', $str); return $str; } }