我需要为表格结果视图创建一个带有下载按钮的csv文件。我正在使用Laravel框架,我不确定如何做到这一点。
我的控制器获取数据。
public function reportFailedPayments(){
$startdate = Input::get('startdate');
$enddate = Input::get('enddate');
$status = Input::get('status');
$data = Payment::with('purchase', 'history', 'history.billingInformation', 'purchase.user', 'purchase.productInstance', 'purchase.productInstance.product', 'billingInformation')
->where('Status', '=',$status)->whereBetween('Payment_Date', array($startdate, $enddate))->orderBy('Payment_Date','desc')->get();
return View::make('admin.reports.failedPayments.report', array('payments'=>$data));
}
}
这是我的表格视图。只是需要一些关于如何为csv创建DL的建议。
<table class='list'>
<thead>
<tr>
<th>Customer Name</th>
<th>Customer Email</th>
<th>Product Name</th>
<th>Purchase Date</th>
<th>Initial Payment Date</th>
<th>Last Payment Date</th>
<th>Billing Method</th>
<th>Transaction Code</th>
<th>Transaction Message</th>
</tr>
</thead>
<tbody>
@foreach($payments as $p)
<tr>
<td>{{ $p->purchase->user->Last_Name.', '.$p->purchase->user->First_Name }}</td>
<td>{{ $p->purchase->user->Email }}</td>
<td>{{ $p->purchase->productInstance->product->Name }}</td>
<td>{{ $p->purchase->Purchase_Date }}</td>
<td>{{ $p->Payment_Date }}</td>
<td>{{ $p->lastHistory()->Process_Time }}</td>
<td>{{ $p->lastHistory()->billingInformation->Payment_Type == PaymentType::PayPal ? "PayPal" :
CreditCardType::ToString($p->lastHistory()->billingInformation->CCType)." Ending In ".$p->lastHistory()->billingInformation->CCLast4 }}</td>
<td>{{ $p->lastHistory()->Trans_Response_Code }}</td>
<td>{{ $p->lastHistory()->Trans_Response_Text }}</td>
</tr>
@endforeach
</tbody>
</table>
答案 0 :(得分:0)
首先我要说的是,我不会为您编写所有代码。这不是StackOverflow的目的......
但是我希望我能用这个答案指出你正确的方向
您的问题可以分为两个任务。一个是生成CSV文件,然后提供下载。
您会在互联网上找到很多代码段。这是我找到并修改了一下
的一个$csvData = $yourCollection->toArray();
$filename = tempnam(sys_get_temp_dir(), 'csv_'); // create a temporary file in the system's default tmp directory
$file = fopen($filename, 'w');
foreach($csvData as $row){
fputcsv($file, $row, ';'); // 3rd parameter is optional (default: ',')
}
fclose($file);
现在我们的temp文件夹中有一个csv文件,可以下载了。 Laravel为您提供了一种下载文件的方法。
在您的控制器操作中:
$response = Response::download($filename);
unlink($filename); // lets not forget to delete the file or they will pile up in your temp folder
return $response;
也许您还需要发送一些额外的标题(例如,用于指定用户看到的文件名),但我会将其留给您。
以下是对代码中使用的函数的一些引用: