CakePHP:将索引视图导出到 CSV 文件
CakePHP: Export index view to CSV file
我有一个机制可以基本上将特定模型中的所有内容转储到 CSV 文件中。
public function export() {
ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
//create a file
$filename = "export_".date("Y.m.d").".csv";
$csv_file = fopen('php://output', 'w');
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'"');
$results = $this->Requirement->find('all');
// Column headings
$header_row = array("Req #", "Identity", "Status", "Name", "Description", "Owner");
fputcsv($csv_file,$header_row,',','"');
// Loop to create CSV file rows
foreach($results as $result)
{
// Array indexes correspond to the field names in your db table(s)
$row = array(
$result['Requirement']['req_number'],
$result['Requirement']['or_identity'],
$result['Requirement']['req_status'],
$result['Requirement']['mission_id'],
$result['Requirement']['description'],
$result['Requirement']['req_owner']
);
fputcsv($csv_file,$row,',','"');
}
fclose($csv_file);
这在我们需要进行批量导出时有效。我现在需要做的是仅将索引视图转储到 CSV 文件中。这是我控制器中索引函数的代码:
public function index(){
if(!empty($this->request->data['Requirement'])) {
$this->Session->write('Requirement', $this->request->data['Requirement']);
} else {
$this->request->data['Requirement'] = $this->Session->read('Requirement');
}
$options = array('Requirement.mission_id' => $this->request->data['Requirement']['mission_id']);
$this->Paginator->settings = $this->paginate;
$this->set('requirements', $this->Paginator->paginate('Requirement', $options));
}
这些是视图中显示的列:
<?php foreach($requirements as $requirement): ?>
<tr>
<td width="5%"><?php echo $requirement['Requirement']['req_number']; ?></td>
<td width="15%"><?php echo $requirement['Requirement']['or_identity']; ?></td>
<td width="10%"><?php echo $status = ($requirement['Requirement']['req_status'] == 0 ? 'Open' : 'Closed'); ?></td>
<td width="15%"><?php echo $requirement['ReqIdentity']['req_name']; ?></td>
<td width="50%"><?php echo $requirement['ReqIdentity']['req_description']; ?></td>
<td width="10%"><?php echo $requirement['ReqIdentity']['req_owner']; ?></td>
</tr>
<?php endforeach; ?>
索引视图在 mission_id 上过滤。我如何使用我的导出函数来导出我的索引函数输出的内容?
可能的实现:
将代码从您的 export()
方法移动到 csv()
方法,该方法根据参数内部传递的数据创建 CSV 文件,而不是从数据库中检索它:
public function csv($results) {
//code for your export() method, except for the line
//$results = $this->Requirement->find('all');
}
将您的 export()
方法重写为:
public function export() {
$results = $this->Requirement->find('all');
$this->csv($results);
}
向您的 index()
操作添加功能以检测导出条件:
public function index(){
if(!empty($this->request->data['Requirement'])) {
$this->Session->write('Requirement', $this->request->data['Requirement']);
} else {
$this->request->data['Requirement'] = $this->Session->read('Requirement');
}
$options = array('Requirement.mission_id' => $this->request->data['Requirement']['mission_id']);
$this->Paginator->settings = $this->paginate;
if (!empty($this->request->params['named']['export'])) {
$this->set('requirements', $this->Paginator->paginate('Requirement', $options));
} else {
$this->csv($this->Paginator->paginate('Requirement', $options));
}
}
将以下行添加到您的 index
视图中:
<?=$this->Html->link('Export',$this->here . "/export:true")?>
我有一个机制可以基本上将特定模型中的所有内容转储到 CSV 文件中。
public function export() {
ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
//create a file
$filename = "export_".date("Y.m.d").".csv";
$csv_file = fopen('php://output', 'w');
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'"');
$results = $this->Requirement->find('all');
// Column headings
$header_row = array("Req #", "Identity", "Status", "Name", "Description", "Owner");
fputcsv($csv_file,$header_row,',','"');
// Loop to create CSV file rows
foreach($results as $result)
{
// Array indexes correspond to the field names in your db table(s)
$row = array(
$result['Requirement']['req_number'],
$result['Requirement']['or_identity'],
$result['Requirement']['req_status'],
$result['Requirement']['mission_id'],
$result['Requirement']['description'],
$result['Requirement']['req_owner']
);
fputcsv($csv_file,$row,',','"');
}
fclose($csv_file);
这在我们需要进行批量导出时有效。我现在需要做的是仅将索引视图转储到 CSV 文件中。这是我控制器中索引函数的代码:
public function index(){
if(!empty($this->request->data['Requirement'])) {
$this->Session->write('Requirement', $this->request->data['Requirement']);
} else {
$this->request->data['Requirement'] = $this->Session->read('Requirement');
}
$options = array('Requirement.mission_id' => $this->request->data['Requirement']['mission_id']);
$this->Paginator->settings = $this->paginate;
$this->set('requirements', $this->Paginator->paginate('Requirement', $options));
}
这些是视图中显示的列:
<?php foreach($requirements as $requirement): ?>
<tr>
<td width="5%"><?php echo $requirement['Requirement']['req_number']; ?></td>
<td width="15%"><?php echo $requirement['Requirement']['or_identity']; ?></td>
<td width="10%"><?php echo $status = ($requirement['Requirement']['req_status'] == 0 ? 'Open' : 'Closed'); ?></td>
<td width="15%"><?php echo $requirement['ReqIdentity']['req_name']; ?></td>
<td width="50%"><?php echo $requirement['ReqIdentity']['req_description']; ?></td>
<td width="10%"><?php echo $requirement['ReqIdentity']['req_owner']; ?></td>
</tr>
<?php endforeach; ?>
索引视图在 mission_id 上过滤。我如何使用我的导出函数来导出我的索引函数输出的内容?
可能的实现:
将代码从您的
export()
方法移动到csv()
方法,该方法根据参数内部传递的数据创建 CSV 文件,而不是从数据库中检索它:public function csv($results) { //code for your export() method, except for the line //$results = $this->Requirement->find('all'); }
将您的
export()
方法重写为:public function export() { $results = $this->Requirement->find('all'); $this->csv($results); }
向您的
index()
操作添加功能以检测导出条件:public function index(){ if(!empty($this->request->data['Requirement'])) { $this->Session->write('Requirement', $this->request->data['Requirement']); } else { $this->request->data['Requirement'] = $this->Session->read('Requirement'); } $options = array('Requirement.mission_id' => $this->request->data['Requirement']['mission_id']); $this->Paginator->settings = $this->paginate; if (!empty($this->request->params['named']['export'])) { $this->set('requirements', $this->Paginator->paginate('Requirement', $options)); } else { $this->csv($this->Paginator->paginate('Requirement', $options)); } }
将以下行添加到您的
index
视图中:<?=$this->Html->link('Export',$this->here . "/export:true")?>