2017-10-09 3 views
0

J'essaie de faire une exportation csv sur mon projet symfony et je pense que quelque chose ne va pas parce que rien ne se passe et je n'ai pas d'erreur ... ??Export csv ne fonctionne pas avec symfony 3

public function exportCsv($customers) 
{ 
$fileName = "export_" . date("d_m_Y") . ".csv"; 
$response = new StreamedResponse(); 


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

    // Nom des colonnes du CSV 
    fputcsv($handle, array('Name', 
     'Adress', 
     'City', 
     'Code' 
    ), ';'); 

    //Champs 
    foreach ($customers as $index => $customer) 
    { 
     //dump($client);die(); 
     fputcsv($handle,array(
      $customer->getName(), 
      $customer->getAdress(), 
      $customer->getCity(), 
      $customer->getCode(), 
     ),';'); 
    } 
    fclose($handle); 
}); 


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


return $response; 

} 

-je appeler cette fonction dans mon controleur comme ceci:

if (isset($_POST['export'])) 
{ 
    $export = $exp->exportCsv($customers); 

} 

Avez-vous une idée, s'il vous plaît ???

Répondre

0

Si vous voulez voir ce qui s'est passé dans votre réponse en streaming et quelle est l'erreur, il vous suffit d'appeler la fonction de rappel en dehors de la réponse.

$callback = function() use ($customers){ 
    $handle = fopen('php://output', 'w+'); 

    // Nom des colonnes du CSV 
    fputcsv($handle, array('Name', 
     'Adress', 
     'City', 
     'Code' 
    ), ';'); 

    //Champs 
    foreach ($customers as $index => $customer) 
    { 
     //dump($client);die(); 
     fputcsv($handle,array(
      $customer->getName(), 
      $customer->getAdress(), 
      $customer->getCity(), 
      $customer->getCode(), 
     ),';'); 
    } 
    fclose($handle); 
}; 

$callback();exit; 

Et après seulement supprimer la dernière ligne et insérez la fonction de rappel dans l'objet StreamedResponse $response->setCallback($callback);

+0

ok !! merci votre votre réponse! Je l'ai fait et j'ai vu le contenu de StreamedResponse. Pour ça c'est ok mais je ne sais pas pourquoi le fichier csv ne télécharge pas ...? – Moh

+0

Si vous voyez le contenu que vous n'avez pas ' t avoir une erreur. Peut-être que vous n'avez pas de retour dans votre action. Vous devez renvoyer votre variable 'export' mais normalement si vous ne retournez rien ' Symfony lance une erreur en disant que vous devez retourner une réponse. –