2016-06-10 14 views
1

Ich bin ein bisschen verwirrt mit einem CSV-Download. Ich bin sehr glücklich, es in einer Datei zu speichern und einen Link für den Benutzer bereitzustellen, aber das scheint wie der falsche Weg zu gehen, nach den Dingen zu urteilen likethese.Laravel 5.2 stream herunterladen

Ausgehend von dieser Antwort Use Laravel to Download table as CSV Ich glaube, ich habe festgestellt, dass die stream() Methode nicht mehr existiert.

public function download() 
{ 
    $headers = [ 
      'Cache-Control'  => 'must-revalidate, post-check=0, pre-check=0' 
     , 'Content-type'  => 'text/csv' 
     , 'Content-Disposition' => 'attachment; filename=galleries.csv' 
     , 'Expires'    => '0' 
     , 'Pragma'    => 'public' 
    ]; 

    $list = $this->users->getAllUsers()->toArray(); 

    # add headers for each column in the CSV download 
    array_unshift($list, array_keys($list[0])); 

    $callback = function() use ($list) 
    { 
     $FH = fopen('php://output', 'w'); 
     foreach ($list as $row) { 
      fputcsv($FH, $row); 
     } 
     fclose($FH); 
    }; 

    // return Response::stream($callback, 200, $headers); // Old version 
    return response()->download($callback, 'Users-' . date('d-m-Y'), $headers); 

} 

Ich habe versucht, die Laravel 5.2 response() Funktion zu nutzen, ich bin aber nur ein bisschen immer verloren, was mit ich reagiere - download() die logische Option scheint, aber das gibt mir die folgenden Fehler :

Object of class Closure could not be converted to string

Was sinnvoll ist. Was ist der richtige Weg? Oder sollte ich die Datei speichern und dann nur den Dateipfad als erstes Argument meiner download()-Funktion verwenden - etwas, was mir schlecht zu sein scheint?

Antwort

0

Es war einfach genug und hat super funktioniert, wenn ich die Klasse & statischen Aufruf Response:: Mit der Hilfsfunktion, response()-> ersetzt:

return response()->stream($callback, 200, $headers); 

Ich glaube, dass dies die StreamedResponse-Klasse verwendet.