2017-10-09 23 views
0

我嘗試在我的symfony項目上做一個csv導出,我認爲有什麼錯誤,因爲沒有任何反應,我沒有錯誤......?csv導出不與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; 

} 

我調用這個函數在我CONTROLER這樣的:

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

} 

你有什麼想法,請???

回答

0

如果您想查看流式響應中發生了什麼以及錯誤是什麼,您只需在響應之外調用回調函數即可。

$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; 

及後只刪除最後一行,並插入StreamedResponse對象$response->setCallback($callback);

+0

OK裏面的回調函數!謝謝你的回答!我做到了,我看到了StreamedResponse內容。爲此,它是好的,但我不知道爲什麼csv文件不下載...? – Moh

+0

如果您看到您不知道的內容'有任何錯誤。也許你在行動中沒有回報。你必須返回你的變量'export',但通常如果你不想返回任何東西,Symfony會拋出一個錯誤,說你必須返回一個響應。 –