2017-10-08 4 views
0

J'essaie de faire une exportation csv sur mon projet symfony et je pense que quelque chose ne va pas parce que la fonction retourne une réponse simple et ne télécharge pas le csv.pourquoi l'exportation csv ne fonctionne pas?

est ici la fonction:

public function exportCsv($customers) 
{ 

    $fileName = "export_" . date("d_m_Y") . ".csv"; 
    $response = new StreamedResponse(); 

     $handle = fopen('php://output', 'w+'); 

     fputcsv($handle, array('Name', 
      'Adress', 
      'City', 
      'Code' 
     ), ';'); 


     foreach ($customers as $index => $custom) 
     { 

      fputcsv($handle,array(
       $custom->getName(), 
       $custom->getAdress(), 
       $custom->getCity(), 
       $client->getCode(), 
      ),';'); 
     } 

     fclose($handle); 

    $response->setStatusCode(200); 
    $response->headers->set('Content-Type', 'text/csv; charset=utf-8'); 
    $response->headers->set('Content-Disposition','attachment; filename='.$fileName); 

    return $response; 

} 

Répondre

0

Après avoir créé un objet de réponse en flux continu, vous avez besoin d'ajouter la fonction de rappel qui remplira votre objet de réponse avec le contenu: $response->setCallback().

public function exportCsv($customers) 
{ 

    $fileName = "export_" . date("d_m_Y") . ".csv"; 
    $response = new StreamedResponse(); 


    $response->setCallback(function() { 
     $handle = fopen('php://output', 'w+'); 

     fputcsv($handle, array('Name', 'Adress', 'City', 'Code'),';'); 

     foreach ($customers as $index => $custom) 
     { 

      fputcsv($handle,array(
       $custom->getName(), 
       $custom->getAdress(), 
       $custom->getCity(), 
       $client->getCode(), 
     ),';'); 
     } 

     fclose($handle); 
    }); 

    $response->setStatusCode(200); 
    $response->headers->set('Content-Type', 'text/csv; charset=utf-8'); 
    $response->headers->set('Content-Disposition','attachment; 
    filename='.$fileName); 

    return $response; 

} 
+0

Ok! Merci pour votre réponse!! mais cela ne marche pas .. J'ajoute cette ligne: $ response-> setCallback (function() use ($ customers) {}); Et maintenant je n'ai pas de réponse ... Une idée ?? Peut-être que j'ai oublié les en-têtes ??? – Moh

+0

Aucune idée? Aidez-moi, s'il vous plaît!!! – Moh