2017-10-09 23 views
0

symfonyプロジェクトでCSVエクスポートを実行しようとしていますが、何も起こりません。csv exportが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

OK StreamedResponseオブジェクト内のコールバック関数を挿入した後!あなたの答えをありがとう!私はそれをし、私はStreamedResponseコンテンツを見た。これはOKですが、なぜCSVファイルがダウンロードされていないのかわかりません...? – Moh

+0

あなたがこのコンテンツを表示していない場合は、'に誤りがあります。あなたの行動の中に戻りがないかもしれません。あなたは変数 'export'を返さなければなりませんが、通常はあなたが手に入れない場合'何も返さないsymfonyはエラーを返して応答を返さなければなりません。 –

関連する問題