2017-10-09 7 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; 

그리고 단지 마지막 줄을 삭제하고 $response->setCallback($callback);

+0

확인 StreamedResponse 객체 내부의 콜백 함수를 삽입 한 후! 당신의 대답에 감사드립니다! 나는 그것을했고 나는 StreamedResponse 콘텐츠를 보았다. 이건 괜찮아요,하지만 난 csv 파일을 다운로드하지 않는 이유를 모른다 ...? – Moh

+0

콘텐츠가 표시되지 않으면 '에 오류가 있습니까? 당신은 당신의 행동 안에 복귀하지 않을 수 있습니다. 변수'export'를 반환해야하지만, 일반적으로 돈을받지 못하면 ' 반환 아무것도하지 않습니다. Symfony는 응답을 반환해야한다는 오류를 던집니다. –