私は注文のいくつかのグラフを示すcake php index関数を持っています。このインデックスビューでは、ユーザーは〜から日付を選択できます。フォームが送信されると、選択した日付の注文のグラフが更新されます。今私は、これらの2つの日付選択に単純な選択オプションを追加することで、Excelにデータをエクスポートする別の機能を実装しようとしています。ヘッダを設定してファイルをダウンロードした後にコードが続かない
Excelを書き出すことができないときは、ヘッダーを設定しなければなりません。ヘッダーを設定すると、コードは必要に応じて連続しません。だからここ
は私の指数関数は
public function index() {
$orderData = $this->Order->getDashboardOrdersStatisticBetweenData();
if ($this->request->is('post') || $this->request->is('put')) {
$dateFrom = $this->request->data['orderSumDates']['date_from'];
$dateTo = $this->request->data['orderSumDates']['date_to'];
$orderData = $this->Order->getDashboardOrdersStatisticBetweenData($dateFrom, $dateTo);
if ($this->request->data['orderSumDates']['export_type'] == 'export_excel') {
$this->generateExcelFile($orderData, $dateFrom, $dateTo);
die('Code never gets here, but file is downloaded');
}
}
$this->set('orderStatistic', $orderData);
}
であり、これは私の生成Excelファイル機能である
protected function generateExcelFile($orderData, $dateFrom, $dateTo) {
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="OrderReport'.$dateFrom.'-'.$dateTo.'.xlsx"');
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
// Summary of report
$objPHPExcel->getActiveSheet()->SetCellValue('A5', 'Total number of orders');
// Some other stuff
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
header_remove('Content-type');
header_remove('Content-Disposition');
}
だから、問題は、私はexport_excelオプションを選択した場合、$this->generateExcelFile
関数が実行されますし、ファイルをエクセルでありますダウンロードされましたが、コードの残りの部分は決して発生しません。例えば、このdie('Code never gets here, but file is downloaded');
のように実行されることはありません。私はいくつかのテストを行いましたが、もし私が$this->generateExcelFile
関数のヘッダ()部分をコメントアウトすると、コードは通常通り(ダイが実行されます)、エクセルファイルが正しく生成されないので、それらのヘッダは重要です。あなたは私の問題を見越して私を助けてもらえますか?
エラーが有効になっていますか?エラーログを確認しましたか? –
エラーはありません...コードは動作していますが、問題はそれが間違った方法で書かれていることです。 generateExcelFile関数内でヘッダーを設定すると、インデックス関数では処理されません –
ヘッダーを返す前にコードを実行してください – TedRed